libiconv-1.11 に以下の修正を施すパッチです。
以下の例は、Linux の場合です。他の OS の場合は、適切なコマンドの使用および設定を行ってください。
$ gzip -dc libiconv-1.11.tar.gz | tar xvf - $ cd libiconv-1.11 $ gzip -dc ../libiconv-1.11-ja-1.patch.gz | patch -p1
※パッチがあたらない場合は、GNU patch をご使用ください。
$ ./configure $ make ; make check $ su # make install
必要に応じて /etc/ld.so.conf に /usr/local/lib を追加し ldconfig -v (/sbin/ldconfig -v) を実行しておく。
$ iconv -l | grep -- -MS EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN EUCJPMS CP932 MS932 SHIFFT_JIS-MS SJIS-MS SJIS-OPEN SJIS-WIN WINDOWS-31J WINDOWS-932 CSWINDOWS31J ISO-2022-JP-MS $
次の文字の Unicode との対応を、libiconv 独自の変換から、マイクロソフトの変換にあわせて修正
cp932 | ⇔ | Unicode | |
---|---|---|---|
¢ | 0x8191 | ⇔ | U+00A2 |
£ | 0x8192 | ⇔ | U+00A3 |
¬ | 0x81CA | ⇔ | U+00AC |
− | 0x817C | ⇔ | U+2212 |
‖ | 0x8161 | ⇔ | U+2016 |
〜 | 0x8160 | ⇔ | U+301C |
cp932 | ⇔ | Unicode | |
---|---|---|---|
¢ | 0x8191 | ⇔ | U+FFE0 |
£ | 0x8192 | ⇔ | U+FFE1 |
¬ | 0x81CA | ⇔ | U+FFE2 |
− | 0x817C | ⇔ | U+FF0D |
‖ | 0x8161 | ⇔ | U+2225 |
〜 | 0x8160 | ⇔ | U+FF5E |
cp932(Windows-31J)で重複符号化されている文字の変換を、マイクロソフトの変換にあわせて修正
変換の詳細は、次を参照
Windows Code Page 51932 (Windows での EUC-JP) を実装。
コードセット | 文字セット | コード範囲 |
---|---|---|
0 (G0) | JIS X 0201 ラテン文字 | 1バイト目 0x00〜0x7F |
1 (G1) | JIS X 0208:1997 NEC特殊文字 NEC選定IBM拡張文字 | 1バイト目 0xA1〜0xA8,0xAD,0xB0〜0xF4,0xF9〜0xFC 2バイト目 0xA1〜0xFE |
2 (G2) | JIS X 0201 片仮名 | 1バイト目 0x8E 2バイト目 0xA1〜0xDF |
3 (G3) | 未使用 |
cp932 の変換の修正により、iconv() を使って cp932 と EUC-JP 間の相互変換で、一部の JIS X 0208 の文字が正しく相互変換できなくなる事と、日本語EUC符号化方式で cp932 の機種依存文字に対応させる為に、TOG日本ベンダ協議会 の CDE/Motif 技術検討 WG が作成した eucJP-ms の変換規則 を実装しました。
eucJP-ms の変換については、次のページを作成しましたで、そちらをご覧ください。
cp932 の変換の修正により、iconv() を使って cp932 と ISO-2022-JP 間の相互変換で、一部の JIS X 0208 の文字が正しく相互変換できなくなる事と、7ビットJIS符号化方式で cp932 の機種依存文字に対応させる為に、ISO-2022-JP-MS というものを実装しました。
各文字セットで使用するエスケープシーケンスは次の通りです。
文字集合 | エスケープシーケンス | コード範囲 | 入力 | 出力 |
---|---|---|---|---|
US-ASCII | ESC ( B | 0x00〜0x7F | ○ | ○ |
JIS X 0201 ラテン文字 | ESC ( J | 0x00〜0x7F | ○ | - |
JIS X 0201 片仮名 | ESC ( I | 0x21〜0x3F | ○ | ○ |
JIS X 0208-1978
NEC特殊文字 NEC選定IBM拡張文字 | ESC $ @ | 1バイト目 0x21〜0x28,0x2D,0x30〜0x74,0x79〜0x7C 2バイト目 0x21〜0x7E | ○ | - |
JIS X 0208:1997 NEC特殊文字 NEC選定IBM拡張文字 | ESC $ B | 1バイト目 0x21〜0x28,0x2D,0x30〜0x74,0x79〜0x7C 2バイト目 0x21〜0x7E | ○ | ○ |
ユーザー定義文字 | ESC $ ( ? | 1バイト目 0x21〜0x34 2バイト目 0x21〜0x7E | ○ | ○ |
ESC $ ( ? は、JIS X 0202:1998 (ISO/IEC 2022:1994) の次の規定を利用します。
13.3.3 私用 どのエスケープシーケンスにおいても, 終端バイトの Fp (すなわち, 03 の列) は, 私用のため保留とする。私用のためのエスケープシーケンスは, ISO 2375 の登録対象外とする。これらは, 交換当事者間の合意によって定義する。
フォーマット
Shift_JIS、EUC-JP、ISO-2022-JP の変換をそれぞれ CP932、EUC-JP-MS(eucJP-ms)、ISO-2022-JP-MS としたい場合は、次のような設定を行ないます。(bash での環境変数設定例)
CHARSET_ALIAS="Shift_JIS=CP932:EUC-JP=EUC-JP-MS:ISO-2022-JP=ISO-2022-JP-MS" export CHARSET_ALIAS
JIS X 0212 の 2区23点と2区81点 が Unicode との相互変換で別のコードポイントに変換されます。
JIS X 0212 区-点 | eucJP-ms | → | Unicode | → | eucJP-ms |
---|---|---|---|---|---|
2-23 (TILDE) | 0x8FA2B7 | → | U+FF5E (FULLWIDTH TILDE) | → | 0xA1C1 (〜) |
2-81 (NUMERO SIGN) | 0x8FA2F1 | → | U+2116 (NUMERO SIGN) | → | 0xADE2 (No.) |
この制限は、cp932 との相互変換を優先させた結果、生じた制限です。