日本語環境ユーザーズガイド

第 3 章 符合化文字集合 (文字コード)

この章では、日本語環境で使用される文字コードについて説明します。

日本語 EUC

日本語 EUC は、EUC (Extended UNIX Code : 拡張 UNIX コード) に、日本語文字集合を割り当てた文字集合およびエンコーディングを提供します。これは、ja または ja_JP.eucJP ロケールで日本語を表現する文字コード体系として使われています。日本語 EUC に関する詳細は、eucJP(5) マニュアルページを参照してください。

PC 漢字コード

PC 漢字コード (以降、PCK とします) は、一般に「シフト JIS (あるいは MS 漢字) コード」と呼ばれ、Microsoft が Windows 3.1 で規定したマイクロソフト標準キャラクタセットと同等の文字集合およびエンコーディングを提供するものです。ja_JP.PCK ロケールで日本語を表現する文字コード体系として使われています。PCK に関する詳細は、PCK(5) マニュアルページを参照してください。

UTF-8

UTF-8 は、Unicode のエンコーディングの1つであり、ASCII 部分 (0x00-0x7F) に関しては EUC または PCK と互換性を保ったまま、UTF-16 や UTF-32 の文字を使えるようにしたエンコーディングです。ja_JP.UTF-8 ロケールで文字を表現する文字コード体系として使われています。

Solaris の提供する UTF-8 は Unicode Consortium の Unicode 3.1 に基づきます。 ユーザー定義文字領域は、Unicode 3.1 で Private Use area に割り当てられている領域で、日本語 EUC や PCK で表現 できるすべての文字(ベンダー定義文字も含む)も Unicode 3.1 の中に含まれています。Unicode 3.1 に関する詳細は、http://www.unicode.org を参照してください。


注 –

Solaris 上の制限で、Unicode 3.1 で定義されたすべての文字が表示、印刷、入力できるわけではありません。


iconv による変換

現在、日本語を表現する文字コードには、eucJP、PCK のほかに、ISO-2022-JP、UTF-8 などがあります。

Sun のネットワーク機能を使って他のマシンからファイルをコピーする場合や、他のマシンへファイルを転送する場合、日本語文字コードが違うと、そのままでは文字化けを起こして使用できません。このような場合は、コード変換フィルタを使用します。コード変換フィルタとは、異なる日本語文字コード間で、ファイル中の漢字コードを変換するフィルタのことです。たとえば日本語 EUC から ISO-2022-JP への変換や、その逆の変換を行うフィルタがあります。

Solaris では、『X/Open Portability Guide Issue 5 (XPG5)』の規定に準拠した iconv コマンドがサポートされています。iconv は、次のような書式で使用します。


sun% iconv -f <変換元文字コード> -t <変換先文字コード> [filename...]

Solaris では、この iconv に対応した文字コード用の変換モジュールを提供しています。iconv コマンドについては、iconv(1) および iconv_ja(5) のマニュアルページを参照してください。

端末用の変換

Solaris は、端末ベースの入出力に対して、日本語の処理機能を提供しています。その中でも、setterm には、種類の異なる端末間にインタフェースを提供する機能があります。setterm を使って端末を設定すると、扱う文字コード (ロケールにより設定される) と端末の文字コードの違いをコード変換によって吸収できます。また STREAMS 内部で日本語文字コードが正しく処理されるように設定できます。

たとえば、ja または ja_JP.eucJP ロケールで PCK 漢字端末が接続されている場合、入力は日本語 EUC に変換され、端末への出力は PCK に変換されます。

漢字端末を設定する setterm コマンドは、次のような書式で使用します。


sun% setterm [ -x name ] [ -t ]

現在のロケールの文字コードと端末の文字コードが同じであれば、setterm(1) を 使用しないで端末の設定を行うことができます。


sun % stty deteucw

詳細は、setterm(1) のマニュアルページを参照してください。

文字コード変換規則

ここでは、日本語 EUC、PCK、UTF-8 間の文字コード変換規則について説明します。

ここで説明する変換規則に従うインタフェースは次のものです。

変換規則の概要

ベンダー定義文字、ユーザー定義文字についての変換規則の概要は次のようになります。

図 3–1 文字コード変換規則

ベンダー定義文字、ユーザー定義文字についての文字コード変換規則を表示しています。

日本語 EUC と PC 漢字コード間の変換規則

日本語 EUC と PCK の文字コード変換規則は『TOG 日本ベンダ協議会』の日本語 EUC・シフト JIS コード変換仕様』に基づいています。変換規則の概要は、図 3–1 を参照してください。

  1. JIS X 0201 で規定されている英数字、記号

    変換先でも変換元と同じコードになります。

  2. JIS X 0201 で規定されているカタカナ、記号

    変換先でも変換元と同じコードになります。ただし、日本語EUC 側ではEUCコードセット2を示す SS2 (0x8e) が先頭に付加されます。

  3. JIS X 0208 で規定されている文字

    それぞれのコードセットで割り当てられている JIS X 0208 の同じ区、点用のコードポイントの間で変換します。

  4. JIS X 0212 で規定されている文字

    PCK で IBM 拡張文字として定義されている文字の場合は、次の項目を参照してください。その他の文字については対応する文字がないため、置換文字に変換します。置換文字は「〓」(名称: GETA MARK、PCK の値: 0x819C)

  5. ベンダー定義文字

    1. 特殊記号 (13 区記号)

      付録 A 「ベンダー定義文字の変換」を参照してください。

    2. IBM 拡張文字

      JIS X 0208 または JIS X 0212 で同じ文字が規定されている場合はその文字との間で変換します。どちらにも規定されていない場合は、JIS X 0212 の 83 区、84 区の領域を使って変換します。具体的なコードの対応は、付録 B 「フォントの移行」 を参照してください。

    3. NEC 選定 IBM 拡張文字

      PCK から日本語 EUC への変換では、PCK で一度 IBM 拡張文字に変換してから日本語 EUC に変換します。日本語 EUC から PCK への変換では、IBM 拡張文字から NEC 選定 IBM 拡張へは変換されません。

  6. ユーザー定義文字

    以下の領域を使って変換し、区番号、点番号の小さいほうから順にコードを割り当てるものとします。

 

PCK 

日本語 EUC 

ユーザー定義文字 

1880 文字 

0xf040 - 0xf4fc 

0xf540 - 0xf9fc 

0xf5a1 - 0xfefe 

0x8ff5a1 - 0x8ffefe 

日本語 EUC と UTF-8 間の変換規則

(1) JIS X 0201 で規定されている文字

JIS X 0201:1997 で規定されている文字の名称と、Unicode で規定されている文字の名称との間で対応をとります。

例 :「A」の場合

表 3–1
 日本語 EUC JIS 名称 Unicode Unicode 名称 UTF-8
 0x41 LATIN CAPITAL LETTER A U+0041 LATIN CAPITAL LETTER A 0x41

ただし、JIS X 0208 と同時に使用する関係上 JIS X 0208:1997 附属書 5 表 1 で代替名称が規定されている文字についてはその代替名称をもとに変換します。

例 :「ア」の場合

表 3–2
 日本語 EUC JIS 名称 JIS 代替名称 Unicode Unicode 名称 UTF-8
 0x8eb2 KATAKANA LETTER A HALFWIDTH KATAKANA LETTER A U+FF71 HALFWIDTH KATAKANA LETTER A 0xefbdb1

例外として、以下の 2 文字は文字の名称に関係なく同じコードを持つ文字に変換します。

表 3–3
 日本語 EUC JIS 名称 Unicode Unicode 名称 UTF-8
 0x5c YEN SIGN U+005c REVERSE SOLIDUS 0x5c
 0x7f OVER LINE U+007f TILDE 0x7f

(2) JIS X 0208 で規定されている文字

JIS X 0208:1997 で規定されている文字の名称と、Unicode で規定されている文字の名称との間で対応をとります。

例 :「亜」の場合

表 3–4
 日本語 EUC JIS 区点 JIS 名称 Unicode Unicode 名称 UTF-8
 0xb0a1 16 区 1 点 CJK UNIFIED IDEOGRAPH-4E9C U+4E9C CJK UNIFIED IDEOGRAPH-4E9C 0xe4ba9c

ただし、JIS X 0201 と同時に使用する関係上 JIS X 0208:1997 附属書 5 表 2 で代替名称が規定されている文字についてはその代替名称をもとに変換します。

例 :「A」の場合

表 3–5
 日本語 EUC JIS 区点 JIS 名称 JIS 代替名称 Unicode Unicode 名称 UTF-8
 0xa3c1 3 区 33 点 LATIN CAPITAL LETTER A FULLWIDTH LATIN CAPITAL LETTER A U+FF21 FULLWIDTH LATIN CAPITAL LETTER A 0xefbca1

(3) JIS X 0212 で規定されている文字

特殊文字 (附属書 1 で規定されている文字) およびアルファベット (附属書 2 で規定されている文字) については、JIS X 0221:1995 の附属書 3 表 4 に基づき変換します。

 例 : トノスアクセント付きの A を表示しています。 (トノスアクセント付きA) の場合

表 3–6
 日本語 EUC JIS 区点 JIS 名称 Unicode Unicode 名称 UTF-8
 0x8fa6e1 6 区 65 点 トノスアクセント付き大文字A (JIS X 0221 附属書3表4 での名称) U+0386 GREEK CAPITAL LETTER A WITH TONOS 0xe08e86

例外として、以下の 1 文字は以下のように変換します。

表 3–7
 日本語 EUC JIS 区点 JIS 名称 Unicode Unicode 名称 UTF-8
 0x8fa2b7 2 区 23 点 TILDE U+FF5E FULLWIDTH TILDE 0xefbd9e

漢字 (附属書 3 で規定されている文字) の中で、JIS X 0221:1995 の附属書 1 表 3 で規定されているものは、その名称をもとに、Unicode で同じ名称で規定されている文字に変換します。

 例 : JIS X 0221:1995 の附属書 1 表 3 で規定されている文字を表示しています。  の場合

表 3–8
 日本語 EUC JIS 区点 JIS 名称 Unicode Unicode 名称 UTF-8
 0x8fb0a6 16 区 6 点 CJK UNIFIED IDEOGRAPH-4E1F U+4E1F CJK UNIFIED IDEOGRAPH-4E1F 0xe4b89f

JIS X 0221:1995 の附属書 1 表 3 で規定されていない文字は、Unicode データベースに記述されている JIS との対応情報にもとづき変換します。

 例 : JIS X 0221:1995 の附属書 1 表 3 で規定されていない文字を表示しています。  の場合

表 3–9
 日本語 EUC JIS 区点 Unicode Unicode 名称 UTF-8
 0x8fb0a1 16 区 1 点 U+4E02 CJK UNIFIED IDEOGRAPH-4E02 0xe4b882

(4) ベンダー定義文字

特殊記号 (13 区記号) - 付録 A 「ベンダー定義文字の変換」 を参照してください。

IBM 拡張文字 - 付録 A 「ベンダー定義文字の変換」 を参照してください。

(5) ユーザー定義文字

Unicode 基本複数言語面 (BMP) の私用領域 (PUA) の先頭 (U+E000) から 1880 文字分を使用して以下のように対応させます。対応する領域の概念については、図 3–1 を参照してください。

表 3–10
 日本語 EUC Unicode UTF-8
 0xf5a1 ~ 0xf5fe U+E000 ~ U+E05D 0xee8080 ~ 0xee819d
 0xf6a1 ~ 0xf6fe U+E05E ~ U+E0BB 0xee819e ~ 0xee82bb
 ...  
 0xfea1 ~ 0xfefe U+E34E ~ U+E3AB 0xee8d8e ~ 0xee8eab
   
 0x8ff5a1 ~ 0x8ff5fe U+E3AC ~ U+E409 0xee8eac ~ 0xee9089
 0x8ff6a1 ~ 0x8ff6fe U+E40A ~ U+E467 0xee908a ~ 0xee91a7
 ...  
 0x8ffea1 ~ 0x8ffefe U+E6FA ~ U+E757 0xee9bba ~ 0xee9d97

UTF-8 で使用できる 6400 文字のユーザー定義文字のうち、下記の文字については日本語 EUC 側に対応する領域がないため、置換文字に変換します。

Unicode : U+E758 ~ U+F8FF

UTF-8 : 0xee9d98 ~ 0xeea3bf

置換文字は「?」 (名称 : QUESTION MARK、日本語 EUC の値 : 0x3f) を使用します。

PC 漢字コードと UTF-8 間の変換規則

PC 漢字コードと UTF-8 の変換は、内部で一旦変換元のコードセットから日本語 EUC に変換し、そこから目的のコードセットへ変換します。

PC 漢字コードと日本語 EUC との間の変換、日本語 EUC と UTF-8 との間の変換についての記述を参照してください。