EUC(4)

名称
euc - EUC エンコーディング

書式
ENCODING "EUC"

VARIABLE len1 mask1 len2 mask2 len3 mask3 len4 mask4 mask

説明
EUC エンコーディングは、 UNIX ベースのシステムとの互換性を保つために提供されています。 LC_TYPE ソースファイルのフォーマットに関する完全な説明を求めるなら、 mklocale(1) を参照してください。

EUC は、4 つのマルチバイトコードセットを実装しています。 1 番目のコードセット中のマルチバイト文字は、0x00 から 0x7f までの範囲の 1 バイトから始まる len1 バイトのデータで構成されています。 ASCII 文字が使えるようにするため、 len1 は常に 1 です。 2 番目のコードセット中のマルチバイト文字は、 0x8e と 0x8f を除いた 0x80 から 0xff までの範囲の 1 バイトから始まる len2 バイトのデータで構成されています。 3 番目のコードセット中のマルチバイト文字は、 1 バイト目が 0x8e で始まる len3 バイトのデータで構成されています。 4 番目のコードセット中のマルチバイト文字は、 1 バイト目が 0x8f で始まる len4 バイトのデータで構成されています。

EUC マルチバイト文字の rune_t エンコーディングは len および mask 引数に依存しています。 はじめに、各バイトは次のような式で rune_t に変換されます。

    byte0 << ((lenN-1) * 8) | byte1 << ((lenN-2) * 8) | ... | bytelenN-1

そして、この結果を ~mask と AND をとり、 maskN と OR をとります。 コードセット 2 および 3 は処理が特殊で、最初に先頭バイト (0x8e あるいは 0x8f) を削除し、 lenN 引数の値を 1 減らします。

例えば、日本語ロケールは次のような VARIABLE 行を持っています。

    VARIABLE	1 0x0000 2 0x8080 2 0x0080 3 0x8000 0x8080

コードセット 1 は、0x0000 から 0x007f までの値で構成されています。

コードセット 2 は 0x8080 ビットがセットされた値で構成されています。

コードセット 3 は 0x0080 から 0x00ff までの 値で構成されています。

コードセット 4 は 0x0080 ビットがセットされた値を除いた 0x8000 から 0xff7f までの値で構成されています。

グローバルな mask 値は、0x8080 にセットされることに注意してください。これは、この 2 ビット からコードセットが決定されるということを示しています。

例 - 日本語ロケール
以下に示す例は、日本語ロケール用の LC_CTYPE ソースファイルの完全な例です。

    /*
     * JIS 文字集合の EUC を用いた日本語 LOCALE_CTYPE の定義
     */
    ENCODING	"EUC"
    /*		JIS	 JIS	  JIS			*/
    /*		X201	 X208	  X201 			*/
    /*		00-7f		  84-fe			*/
    VARIABLE	1 0x0000 2 0x8080 2 0x0080 3 0x8000 0x8080
    /*
     * コードセット 1
     */
    ALPHA		'A' - 'Z' 'a' - 'z'
    CONTROL		0x00 - 0x1f 0x7f
    DIGIT		'0' - '9'
    GRAPH		0x21 - 0x7e
    LOWER		'a' - 'z'
    PUNCT		0x21 - 0x2f 0x3a - 0x40 0x5b - 0x60 0x7b - 0x7e
    SPACE		0x09 - 0x0d 0x20
    UPPER		'A' - 'Z'
    XDIGIT		'a' - 'f' 'A' - 'F'
    BLANK		' ' '	'
    PRINT		0x20 - 0x7e
    MAPLOWER	< 'A' - 'Z' : 'a' > < 'a' - 'z' : 'a' >
    MAPUPPER	< 'A' - 'Z' : 'A' > < 'a' - 'z' : 'A' >
    TODIGIT		< '0' - '9' : 0 >
    TODIGIT		< 'A' - 'F' : 10 > < 'a' - 'f' : 10 >
    /*
     * コードセット 2
     */
    SPACE		0xa1a1
    PHONOGRAM	0xa1bc
    SPECIAL		0xa1a2 - 0xa1fe
    PUNCT		0xa1a2 - 0xa1f8		/* ここに書くことはたくさんありすぎます */
    SPECIAL		0xa2a1 - 0xa2ae 0xa2ba - 0xa2c1 0xa2ca - 0xa2d0 0xa2dc - 0xa2ea
    SPECIAL		0xa2f2 - 0xa2f9 0xa2fe
    DIGIT		0xa3b0 - 0xa3b9
    UPPER		0xa3c1 - 0xa3da				/* ローマ字 */
    LOWER		0xa3e1 - 0xa3fa				/* ローマ字 */
    MAPLOWER	< 0xa3c1 - 0xa3da : 0xa3e1 >			/* 英字 */
    MAPLOWER	< 0xa3e1 - 0xa3fa : 0xa3e1 >			/* 英字 */
    MAPUPPER	< 0xa3c1 - 0xa3da : 0xa3c1 >
    MAPUPPER	< 0xa3e1 - 0xa3fa : 0xa3c1 >
    XDIGIT		0xa3c1 - 0xa3c6 0xa3e1 - 0xa3e6
    TODIGIT		< 0xa3b0 - 0xa3b9 : 0 >
    TODIGIT		< 0xa3c1 - 0xa3c6 : 10 > < 0xa3e1 - 0xa3e6 : 10 >
    PHONOGRAM	0xa4a1 - 0xa4f3
    PHONOGRAM	0xa5a1 - 0xa5f6
    UPPER		0xa6a1 - 0xa6b8				/* ギリシャ文字 */
    LOWER		0xa6c1 - 0xa6d8				/* ギリシャ文字 */
    MAPLOWER	< 0xa6a1 - 0xa6b8 : 0xa6c1 > < 0xa6c1 - 0xa6d8 : 0xa6c1 >
    MAPUPPER	< 0xa6a1 - 0xa6b8 : 0xa6a1 > < 0xa6c1 - 0xa6d8 : 0xa6a1 >
    UPPER		0xa7a1 - 0xa7c1				/* キリル文字 */
    LOWER		0xa7d1 - 0xa7f1				/* キリル文字 */
    MAPLOWER	< 0xa7a1 - 0xa7c1 : 0xa7d1 > < 0xa7d1 - 0xa7f1 : 0xa7d1 >
    MAPUPPER	< 0xa7a1 - 0xa7c1 : 0xa7a1 > < 0xa7d1 - 0xa7f1 : 0xa7a1 >
    SPECIAL		0xa8a1 - 0xa8c0
    IDEOGRAM	0xb0a1 - 0xb0fe 0xb1a1 - 0xb1fe 0xb2a1 - 0xb2fe
    IDEOGRAM	0xb3a1 - 0xb3fe 0xb4a1 - 0xb4fe 0xb5a1 - 0xb5fe
    IDEOGRAM	0xb6a1 - 0xb6fe 0xb7a1 - 0xb7fe 0xb8a1 - 0xb8fe
    IDEOGRAM	0xb9a1 - 0xb9fe 0xbaa1 - 0xbafe 0xbba1 - 0xbbfe
    IDEOGRAM	0xbca1 - 0xbcfe 0xbda1 - 0xbdfe 0xbea1 - 0xbefe
    IDEOGRAM	0xbfa1 - 0xbffe 0xc0a1 - 0xc0fe 0xc1a1 - 0xc1fe
    IDEOGRAM	0xc2a1 - 0xc2fe 0xc3a1 - 0xc3fe 0xc4a1 - 0xc4fe
    IDEOGRAM	0xc5a1 - 0xc5fe 0xc6a1 - 0xc6fe 0xc7a1 - 0xc7fe
    IDEOGRAM	0xc8a1 - 0xc8fe 0xc9a1 - 0xc9fe 0xcaa1 - 0xcafe
    IDEOGRAM	0xcba1 - 0xcbfe 0xcca1 - 0xccfe 0xcda1 - 0xcdfe
    IDEOGRAM	0xcea1 - 0xcefe 0xcfa1 - 0xcfd3 0xd0a1 - 0xd0fe
    IDEOGRAM	0xd1a1 - 0xd1fe 0xd2a1 - 0xd2fe 0xd3a1 - 0xd3fe
    IDEOGRAM	0xd4a1 - 0xd4fe 0xd5a1 - 0xd5fe 0xd6a1 - 0xd6fe
    IDEOGRAM	0xd7a1 - 0xd7fe 0xd8a1 - 0xd8fe 0xd9a1 - 0xd9fe
    IDEOGRAM	0xdaa1 - 0xdafe 0xdba1 - 0xdbfe 0xdca1 - 0xdcfe
    IDEOGRAM	0xdda1 - 0xddfe 0xdea1 - 0xdefe 0xdfa1 - 0xdffe
    IDEOGRAM	0xe0a1 - 0xe0fe 0xe1a1 - 0xe1fe 0xe2a1 - 0xe2fe
    IDEOGRAM	0xe3a1 - 0xe3fe 0xe4a1 - 0xe4fe 0xe5a1 - 0xe5fe
    IDEOGRAM	0xe6a1 - 0xe6fe 0xe7a1 - 0xe7fe 0xe8a1 - 0xe8fe
    IDEOGRAM	0xe9a1 - 0xe9fe 0xeaa1 - 0xeafe 0xeba1 - 0xebfe
    IDEOGRAM	0xeca1 - 0xecfe 0xeda1 - 0xedfe 0xeea1 - 0xeefe
    IDEOGRAM	0xefa1 - 0xeffe 0xf0a1 - 0xf0fe 0xf1a1 - 0xf1fe
    IDEOGRAM	0xf2a1 - 0xf2fe 0xf3a1 - 0xf3fe 0xf4a1 - 0xf4a4
    /*
     * これは、コードセット 3 の半角かな用です。
     */
    SPECIAL		0xa1 - 0xdf
    PHONOGRAM	0xa1 - 0xdf
    CONTROL		0x84 - 0x97 0x9b - 0x9f 0xe0 - 0xfe

関連項目
mklocale(1), setlocale(3)