2025/03/08(土)FreeBSD iconv がサポートする日本語用エンコード

この記事は FreeBSD 13.4 + バイナリpkg が対象です。

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
$