libiconv-1.9.1-cp932.patch.gz

概要

libiconv-1.9.1 に以下の修正を施すパッチです。

効能

ダウンロード

libiconv-1.9.1-cp932.patch.gz

ご利用方法

パッチのあて方

$ gzip -dc libiconv-1.9.1.tar.gz | tar xvf -
$ cd libiconv-1.9.1
$ gzip -dc ../libiconv-1.9.1-cp932.patch.gz | patch -p1

メイク&インストール

$ ./configure
$ make ; make check
$ su
# make install

他に環境によっては /etc/ld.so.conf に /usr/local/lib を追加し ldconfig -v (/sbin/ldconfig -v) を実行しておく必要があるでしょう。

確認方法

$ iconv -l | egrep -i '(-31j|-ms)'
EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN
CP932 SJIS-OPEN SJIS-WIN WINDOWS-31J CSWINDOWS31J
$ 

詳細

cp932 の修正内容

  1. 次の文字の Unicode との対応を、libiconv 独自の変換から、マイクロソフトの変換にあわせて修正

    表1-1 修正前
    cp932 Unicode
    ¢0x8191U+00A2
    £0x8192U+00A3
    ¬0x81CAU+00AC
    0x817CU+2212
    0x8161U+2016
    0x8160U+301C
    表1-2 修正後
    cp932 Unicode
    ¢0x8191U+FFE0
    £0x8192U+FFE1
    ¬0x81CAU+FFE2
    0x817CU+FF0D
    0x8161U+2225
    0x8160U+FF5E
  2. cp932(Windows-31J)で重複符号化されている文字の変換を、マイクロソフトの変換にあわせて修正

    変換の詳細は、次を参照

  3. IANAの登録名Windows-31Jをcp932のエイリアスとして追加

eucJP-ms について

cp932 の変換の修正により、iconv() を使って cp932 と EUC-JP 間の相互変換で、JIS X 0208 の文字が正しく相互変換できなくなる事と、EUCエンコーディングで cp932 の機種依存文字に対応させる為に、TOG日本ベンダ協議会CDE/Motif 技術検討 WG が作成した eucJP-ms の変換規則 を libiconv に実装しました。

eucJP-ms の変換については、次のページを作成しましたで、そちらをご覧ください。

cp932 修正による影響

cp932 の変換を 表1-2 のように修正したため、iconv( "iso-2022-jp", "cp932" ); といった変換で表1-2 にある文字が変換出来なくなります。

iconv() では、Unicode 経由でエンコーディングの変換をする為、JIS 漢字と Unicode の対応が一致しているコンバーターで変換をするのが望ましい為、RFC1468(ISO-2022-JP) 符号化方式に関しても JIS漢字と Unicode の対応付けが MS 方式になっている iso-2022-jp-ms (例) コンバーターを追加する必要があると思われます。

表2
符号化方式JIS漢字 と Unicode の対応付け
JIS方式MS方式
シフトJISShift_JIScp932
日本語EUCEUC-JPeucJP-ms
RFC1468ISO-2022-JPなし

制限事項

cp932/eucJP-ms の制限事項

このパッチにより、マイクロソフトの Windows と同様の文字解釈による変換を行う cp932 もしくは eucJP-ms を iconv() の fromcode に指定した場合は、tocode に指定できるエンコーディングが次のように限定されます。

fromcodetocode
cp932 cp932
cp932 eucJP-ms
cp932 utf-*,ucs-*
eucJP-mscp932
eucJP-mseucJP-ms
eucJP-msutf-*,ucs-*

※iconv_open() の引数の順番は、第1引数が tocode, 第2引数が fromcode である事に注意

tocode に cp932 もしくは eucJP-ms を指定した場合に fromcode に指定できるエンコーディングは、tocode に、Shift_JIS もしくは EUC-JP を指定した時と同じ物が指定できます。ただし、fromcode に JIS X 0212 を含むエンコーディングを指定した場合には、cp932/eucJP-ms では、次のような変換が行われます。

JIS X 0212 区-点Unicode cp932eucJP-ms
2-23 (TILDE)U+FF5E (FULLWIDTH TILDE) 0x8160 (〜) 0xA1C1 (〜)
2-81 (NUMERO SIGN)U+2116 (NUMERO SIGN)0x8782 (No.) 0xADE2 (No.)

eucJP-ms の制限事項

JIS X 0212 の 2区23点と2区81点 が Unicode との相互変換で別のコードポイントに変換されます。

JIS X 0212 区-点eucJP-msUnicodeeucJP-ms
2-23 (TILDE)0x8FA2B7U+FF5E (FULLWIDTH TILDE)0xA1C1 (〜)
2-81 (NUMERO SIGN)0x8FA2F1U+2116 (NUMERO SIGN)0xADE2 (No.)

この制限は、cp932 との相互変換を優先させた結果、生じた制限です。JIS X 0212 の全文字を正しく Unicode との間で変換する必要がある場合は、iconv() の指定に EUC-JP を使うようにしてください。

追加・修正ファイル一覧

(+) が付いているファイルが追加ファイル

NEWS本パッチによる追加修正内容を追加
READMEEUCJP-MS を追加
lib/aliases.hmake -f Makefile.devel で lib/aliases.gperf から生成。別途 gperf の入手が必要
lib/converters.heucjp_ms.h のインクルードを追加
lib/cp932.h1区〜2区も cp932ext_mbtowc() を呼び出すように変更
lib/cp932ext.htoolsディレクトリで make cp932ext.h として生成。 Unicodeコンソーシアムのサイトにある CP932.TXT の入手と tools/Makefile のTABLESDIRの修正が必要。 tools/Makefile を修正せず cjk_tab_to_h を直接実行しても良い
lib/encodings.defeucJP-msの追加と次のエイリアス追加。CP932: SJIS-OPEN SJIS-WIN WINDOWS-31J CSWINDOWS31J。EUCJP-MS: EUC-JP-MS EUCJP-OPEN EUCJP-WIN
lib/eucjp_ms.h (+)eucJP-msの変換(euc_jp.hをコピーして処理を追加)
lib/eucjp_msext.h (+)toolsディレクトリで make eucjp_msext.h で生成。 TOG/JVC の eucjp-ibmext.txt の入手とMakefileのTABLESDIRの 修正が必要。 Makefileを修正せずcjk_tab_to_hを直接実行しても良い
lib/flags.hmake -f Makefile.devel で lib/genflags が生成
man/iconv_open.3EUCJP-MS を追加
man/iconv_open.3.htmlmake -f Makefile.devel で生成
tests/CP932.IRREVERSIBLE.TXTcp932の修正に伴い修正(make check 用の変換表)
tests/CP932.TXTcp932の修正に伴い修正(make check 用の変換表) Unicodeコンソーシアムにある CP932.TXT がそのまま使われているわけでは無いので注意が必要です。
tests/EUCJP-MS.IRREVERSIBLE.TXT (+)roundtripできない文字の表(make check 用の変換表)
tests/EUCJP-MS.TXT (+)TOG/JVC の表 ( eucJP-0201A.txt, eucJP-0208M.txt, eucJP-0212M.txt, eucJP-13th.txt, eucJP-udc.txt, eucJP-ibmext.txt ) と 0x00〜0x1F の表を結合し sort
tests/Makefile.ineucJP-msのテストを追加
tests/Makefile.mscveucJP-msのテストを追加
tests/Makefile.os2eucJP-msのテストを追加
tools/Makefileeucjp_msext.hの生成規則を追加。 make all ではeucjp_msext.hは生成されないように all の規則ではeucjp_msext.hはコメントアウトしてあります。(変換表の入手が必要な為)
tools/cjk_tab_to_h.ccp932ext.h(修正版),eucjp_msext.hを生成可能なように修正

変更履歴

2004年7月23日
新規作成(公開)
2005年10月3日
パッチの当て方を修正