2025/03/08(土)FreeBSD iconv がサポートする日本語用エンコード
FreeBSD の iconv がサポートする日本語用文字エンコード
FreeBSD は内蔵 iconv と、パッケージの GNU libiconv の両方が存在します。両者でどの程度日本語用エンコードに違いがあるか確認します。
libiconv は ports コンパイルではなく、バイナリパッケージで導入したものです。
対象となる環境
$ freebsd-version -kru 13.4-RELEASE-p3 13.4-RELEASE-p3 13.4-RELEASE-p4 $ $ pkg info libiconv | egrep -i '^(version|WWW)' Version : 1.17_1 WWW : https://www.gnu.org/software/libiconv/ $
リストを作成する
$ /usr/bin/iconv -l | sed 's/ /\n/g' | sort > usr_bin_iconv_list.txt
$ /usr/local/bin/iconv -l | sed 's/ /\n/g' | sort > usr_local_bin_iconv_list.txt
$
$ diff usr_bin_iconv_list.txt usr_local_bin_iconv_list.txt | wc -l
803
$
diff を取る
以下それぞれ + は /usr/local/bin/iconv (pkgのもの)だけがサポートしている、 - は /usr/bin/iconv (FreeBSD内蔵の物)だけがサポートしている エンコードです。
JIS 系
$ diff -U0 usr_bin_iconv_list.txt usr_local_bin_iconv_list.txt | egrep -i 'jis|jp' | egrep -iv 'shift|euc|sjis' +CSISO159JISX02121990 -EBCDIC-JP-E -EBCDIC-JP-KANA +ISO-2022-JP-MS -ISO2022-JP -ISO2022-JP1 -ISO2022-JP2 -ISO2022-JP2004 -ISO2022-JP3 -ISO646-JP-OCR-B -JIS_C6229-1984-B -JIS_X0208:1990 +JIS_X0212 +JIS_X0212-1990 +JIS_X0212.1990-0 -JISX0201 -JISX0201-KANA -JISX0208-1990 -JISX0208:1990 -JISX0208:1990 -JISX0208@1990 -JP-OCR-B $
EUC 系
$ diff -U0 usr_bin_iconv_list.txt usr_local_bin_iconv_list.txt | egrep -i 'euc|extend|[0-9]1932' -51932 -CP51932 -EUC-JP-MS -EUCJP-MS -EUCJP-OPEN -EUCJP-WIN -EUCJPMS +EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE -IBM-EUCJP -MS51932 -MSCP51932 -WINDOWS-51932 $
Shift_JIS 系
$ diff -U0 usr_bin_iconv_list.txt usr_local_bin_iconv_list.txt | egrep -i 'shift|sjis|[^5].932' -MS932 -MSCP932 -SHIFT_JIS-MS +SHIFT-JIS -SJIS-MS -SJIS-OPEN -SJIS-WIN -WINDOWS-932 $
所感
ISO-2022-JP-MS を除くと、おおむね 内蔵 iconv のほうが豊富である。内蔵iconvにリンク可能なら、GNU libiconv の使用は必要なさそう。
(EUCJP-MSを使いたかったのにエラーが出たので調査した。)
おまけ
内蔵 iconv リスト
$ iconv -l | egrep -i 'jis|jp' | egrep -iv 'shift|euc|sjis' CP281 281 EBCDIC-JP-E IBM281 CP290 290 EBCDIC-JP-KANA IBM290 ISO-2022-JP-1 ISO2022-JP1 ISO-2022-JP-2 CSISO2022JP2 ISO2022-JP2 ISO-2022-JP-2004 ISO-2022-JP-3 ISO2022-JP2004 ISO2022-JP3 ISO-2022-JP CSISO2022JP ISO2022-JP ISO646-JP-OCR-B ISO-IR-92 JIS_C6229-1984-B JP-OCR-B ISO646-JP CSISO14JISC6220RO ISO-IR-14 JIS_C6220-1969-RO JP JISX0201-KANA CSHALFWIDTHKATAKANA JISX0201 JISX0201-1976 JIS_X0201 X0201 JISX0208:1990 CSISO87JISX0208 ISO-IR-87 JIS0208 JISX0208-1990 JIS_C6226-1983 JIS_X0208 JIS_X0208-1983 JIS_X0208-1990 JIS_X0208:1990 X0208 JISX0208@1990 JISX0208:1990 $ $ iconv -l | egrep -i 'sjis|shift|([^5].|\b)932|31j' CP932 932 CSWINDOWS31J MS932 MSCP932 SHIFT_JIS-MS SJIS-MS SJIS-OPEN SJIS-WIN WINDOWS-31J WINDOWS-932 SHIFT_JIS-2004 SHIFT_JISX0213 SHIFT_JIS CSSHIFTJIS MS_KANJI SJIS $ $ iconv -l | egrep -i 'euc|extend|[0-9].?932' CP51932 51932 MS51932 MSCP51932 WINDOWS-51932 CP932 932 CSWINDOWS31J MS932 MSCP932 SHIFT_JIS-MS SJIS-MS SJIS-OPEN SJIS-WIN WINDOWS-31J WINDOWS-932 EUC-CN CN-GB CSGB3212 EUCCN GB2312 EUC-JIS-2004 EUC-JISX0213 EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN EUCJPMS EUC-JP CSEUCPKDFMTJAPANESE EUCJP IBM-EUCJP EUC-KR CSEUCKR CSKSC56011987 EUCKR ISO-IR-149 KOREAN KSC_5601 KS_C_5601-1987 KS_C_5601-1989 EUC-TW CNS11643 CSEUCTW EUCTW $
pkg libiconv リスト
$ /usr/local/bin/iconv -l | egrep -i 'jis|jp' | egrep -iv 'shift|euc|sjis' ISO-IR-14 ISO646-JP JIS_C6220-1969-RO JP CSISO14JISC6220RO JISX0201-1976 JIS_X0201 X0201 CSHALFWIDTHKATAKANA ISO-IR-87 JIS0208 JIS_C6226-1983 JIS_X0208 JIS_X0208-1983 JIS_X0208-1990 X0208 CSISO87JISX0208 ISO-IR-159 JIS_X0212 JIS_X0212-1990 JIS_X0212.1990-0 X0212 CSISO159JISX02121990 ISO-2022-JP CSISO2022JP ISO-2022-JP-1 ISO-2022-JP-2 CSISO2022JP2 CP50221 ISO-2022-JP-MS ISO-2022-JP-2004 ISO-2022-JP-3 $ $ /usr/local/bin/iconv -l | egrep -i 'sjis|shift|([^5].|\b)932|31j' MS_KANJI SHIFT-JIS SHIFT_JIS SJIS CSSHIFTJIS CP932 SHIFT_JIS-2004 SHIFT_JISX0213 $ $ /usr/local/bin/iconv -l | egrep -i 'euc|extend|[0-9].?932' EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE CN-GB EUC-CN EUCCN GB2312 CSGB2312 EUC-TW EUCTW CSEUCTW EUC-KR EUCKR ISO-IR-149 KOREAN KSC_5601 KS_C_5601-1987 KS_C_5601-1989 CSEUCKR CSKSC56011987 EUC-JIS-2004 EUC-JISX0213 $