LoginSignup
1
1

[AIX] iconvによる文字コード変換テーブルのカスタマイズ方法

Posted at

iconvによる文字コード変換テーブルのカスタマイズ方法

日本語文字コードにはローマ数字のようにIBM拡張文字とNEC選定文字の両方に定義されている文字があります。
同じ文字として定義されてしまっており完全な相互変換は不可能なため、AIXではIBM拡張文字への変換が優先されています。

そのため、NEC選定文字に対してiconvを実行するとIBM拡張文字に変換されます。

# perl -le 'print pack("H*", "875487558756")' | iconv -f IBM-943 -t IBM-943 | od -xc
0000000     fa4a    fa4b    fa4c    0a00
          Ⅰ  **  Ⅱ  **  Ⅲ  **  \n
# perl -le 'print pack("H*", "8ff3ab8ff3ac8ff3ad")' | iconv -f IBM-eucJP -t IBM-943 | od -xc
0000000     fa4a    fa4b    fa4c    0a00
          Ⅰ  **  Ⅱ  **  Ⅲ  **  \n

この文書ではカスタマイズの例としてNEC選定文字への変換を優先する文字コード変換テーブルの作成方法を記載します。

まず、bos.loc.adt.iconvをインストールします。
下記ファイルが配置されたことを確認したら、ファイルの中を確認します。

/usr/lib/nls/loc/uconvTable/IBM-943.ucmap

下記のように同じUTFの文字コード(U+XXXX)に対して、2つのSHIFT-JIS文字コード(\xXX\xXX)があることを確認します。

<U2160>         \xFA\x4A
<U2160>         \x87\x54

こちらの例の場合は\xFA\x4AがIBM拡張文字です。
重複文字の一覧は下記のコマンドで確認できます。

# awk '{ print $1 }' /usr/lib/nls/loc/uconvTable/IBM-943.ucmap | grep "^<U" | sort | uniq -c | grep "^ [ ]*2" | awk '{ print $2 }'

ここからがカスタマイズ手順になります。
始めにucmapファイルをコピーします。

# cd /usr/lib/nls/loc/uconvTable/
# cp IBM-943.ucmap IBM-943_NEC.ucmap

次にvi等でファイルを開き、先ほどの重複文字の順番を逆にします。

# vi IBM-943_NEC.ucmap
例)
<U2160>         \xFA\x4A
<U2160>         \x87\x54

編集が終わったらuconvdefコマンドで変換モジュールを作成します。

# uconvdef -f IBM-943_NEC.ucmap IBM-943_NEC

新しく作成したモジュールでNEC選定文字に変換されることを確認します。

# perl -le 'print pack("H*", "875487558756")' | iconv -f IBM-943_NEC -t IBM-943_NEC | od -xc
0000000     8754    8755    8756    0a00
          Ⅰ  **  Ⅱ  **  Ⅲ  **  \n
# perl -le 'print pack("H*", "8ff3ab8ff3ac8ff3ad")' | iconv -f IBM-eucJP -t IBM-943_NEC | od -xc
0000000     8754    8755    8756    0a00
          Ⅰ  **  Ⅱ  **  Ⅲ  **  \n

参考:

uconvdef コマンド
https://www.ibm.com/docs/ja/aix/7.3?topic=u-uconvdef-command
uconvdef ソース・ファイル・フォーマット
https://www.ibm.com/docs/ja/aix/7.3?topic=formats-uconvdef-source-file-format
日本語コード一覧表
https://public.dhe.ibm.com/systems/power/docs/aix/53/nl/ja/jp_codebook.pdf

注意:

IBM-943などの事前定義の変換モジュールを置き換えることはサポートされないため、必ず別名で変換モジュールを作成します。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1