nkf 2.0.6 チェック2006年03月28日 07時35分38秒

nkf 2.0.6 がリリースされました。そのため早速チェックしてみました。
nkf 2.0.6 の -e オプションは eucJP-ascii ベースとなっています。

そこで http://www.opengroup.or.jp/jvc/cde/appendix.html のマッピングとの比較を行いました。

とりあえず U+0080 から U+00FF までの範囲を確認したところ、eucJP-ascii では次の変換が行われるようです。


EUC-JP UNICODE
0xA1F1  U+00A2
0xA1F2  U+00A3
0xA1EF  U+00A5
0xA1F8  U+00A7
0xA1AF  U+00A8
0xA2CC  U+00AC
0xA1EB  U+00B0
0xA1DE  U+00B1
0xA1AD  U+00B4
0xA2F9  U+00B6
0xA1DF  U+00D7
0xA1E0  U+00F7

0x8FA2B1 U+00B8
0x8FA2B4 U+00AF
0x8FA2C2 U+00A1
0x8FA2C3 U+00A6
0x8FA2C4 U+00BF
0x8FA2EB U+00BA
0x8FA2EC U+00AA
0x8FA2ED U+00A9
0x8FA2EE U+00AE
0x8FA2F0 U+00A4
0x8FA9A1 U+00C6
0x8FA9AC U+00D8
0x8FA9B0 U+00DE
0x8FA9C1 U+00E6
0x8FA9C3 U+00F0
0x8FA9CC U+00F8
0x8FA9CE U+00DF
0x8FA9D0 U+00FE
0x8FAAA1 U+00C1
0x8FAAA2 U+00C0
0x8FAAA3 U+00C4
0x8FAAA4 U+00C2
0x8FAAA9 U+00C5
0x8FAAAA U+00C3
0x8FAAAE U+00C7
0x8FAAB1 U+00C9
0x8FAAB2 U+00C8
0x8FAAB3 U+00CB
0x8FAAB4 U+00CA
0x8FAABF U+00CD
0x8FAAC0 U+00CC
0x8FAAC1 U+00CF
0x8FAAC2 U+00CE
0x8FAAD0 U+00D1
0x8FAAD1 U+00D3
0x8FAAD2 U+00D2
0x8FAAD3 U+00D6
0x8FAAD4 U+00D4
0x8FAAD8 U+00D5
0x8FAAE2 U+00DA
0x8FAAE3 U+00D9
0x8FAAE4 U+00DC
0x8FAAE5 U+00DB
0x8FAAF2 U+00DD
0x8FABA1 U+00E1
0x8FABA2 U+00E0
0x8FABA3 U+00E4
0x8FABA4 U+00E2
0x8FABA9 U+00E5
0x8FABAA U+00E3
0x8FABAE U+00E7
0x8FABB1 U+00E9
0x8FABB2 U+00E8
0x8FABB3 U+00EB
0x8FABB4 U+00EA
0x8FABBF U+00ED
0x8FABC0 U+00EC
0x8FABC1 U+00EF
0x8FABC2 U+00EE
0x8FABD0 U+00F1
0x8FABD1 U+00F3
0x8FABD2 U+00F2
0x8FABD3 U+00F6
0x8FABD4 U+00F4
0x8FABD8 U+00F5
0x8FABE2 U+00FA
0x8FABE3 U+00F9
0x8FABE4 U+00FC
0x8FABE5 U+00FB
0x8FABF2 U+00FD
0x8FABF3 U+00FF

nkf 2.0.6 では、

EUC-JP UNICODE
0xA1F1 : U+00A2
0xA1F2 : U+00A3
0xA1EF : U+00A5
0xA1F8 : U+00A7
0xA1AF : U+00A8
0xA2CC : U+00AC
0xA1EB : U+00B0
0xA1DE : U+00B1
0xA1AD : U+00B4
0xA2F9 : U+00B6
0xA1DF : U+00D7
0xA1E0 : U+00F7

0xFCFC : U+00A6 0xA1B1 : U+00AF 0xA1A4 : U+00B8

となり、3バイト文字(補助漢字)への変換が行われないのと、U+00A6, U+00AF, U+00B8 が追加されています。(eucJP-ascii との非互換)
この範囲の値は、UNICODE -> EUC-JP -> UNICODE 変換で元の値に戻ります。
また、--fb-xxx で削除されるデータを拾うことができるはずでしたが、うまく機能していないようです。おそらくバグでしょう。

nkf 2.0.6 の --fb-* オプション2006年03月28日 08時06分33秒

nkf 2.0.6 で、UNCODE U+0080 ~ U+00FF までの値を -W16e --fb-subchar で変換すると、
U+00A1
U+00A4
U+00A9
U+00AA
U+00AE
U+00BA
U+00BF
U+00C0
U+00C1
U+00C2
U+00C3
U+00C4
U+00C5
U+00C6
U+00C7
U+00C8
U+00C9
U+00CA
U+00CB
U+00CC
U+00CD
U+00CE
U+00CF
U+00D1
U+00D2
U+00D3
U+00D4
U+00D5
U+00D6
U+00D8
U+00D9
U+00DA
U+00DB
U+00DC
U+00DD
U+00DE
U+00DF
U+00E0
U+00E1
U+00E2
U+00E3
U+00E4
U+00E5
U+00E6
U+00E7
U+00E8
U+00E9
U+00EA
U+00EB
U+00EC
U+00ED
U+00EE
U+00EF
U+00F0
U+00F1
U+00F2
U+00F3
U+00F4
U+00F5
U+00F6
U+00F8
U+00F9
U+00FA
U+00FB
U+00FC
U+00FD
U+00FE
U+00FF
が欠落します。これは欠落してはいけないのではありませんでしたか?
--fb-subchar と --fb-skip との違いは以下のようになります。
0a1,33
< U+0080
< U+0081
< U+0082
< U+0083
< U+0084
< U+0085
< U+0086
< U+0087
< U+0088
< U+0089
< U+008A
< U+008B
< U+008C
< U+008D
< U+008E
< U+008F
< U+0090
< U+0091
< U+0092
< U+0093
< U+0094
< U+0095
< U+0096
< U+0097
< U+0098
< U+0099
< U+009A
< U+009B
< U+009C
< U+009D
< U+009E
< U+009F
< U+00A0
4a38,39
< U+00AB
< U+00AD
5a41,45
< U+00B2
< U+00B3
< U+00B5
< U+00B7
< U+00B9
6a47,50
< U+00BB
< U+00BC
< U+00BD
< U+00BE
23a68
< U+00D0

nkf 2.0.6 リリース2006年03月28日 08時12分41秒

nkf 2.0.6 の入手先を書き忘れていました。ここから取得できます。

http://prdownloads.sourceforge.jp/nkf/19481/nkf206a.tar.gz

MD5 : f4b07268b238ac85551e2777fa2c3836

SHA1: be81a8e3322b0c2567a1c38be9f0ba06b4431152

nkf206.tar.gz が最初にリリースされましたが、アーカイブ内の各ファイルのパーミッションがすべて 0777 になっていたので、nkf206a.tar.gz が作られました。 本質的には同じものです。

Re: NKF の UNICODE -> EUC-JP 変換における問題2006年03月28日 08時29分18秒

NKF における UNICODE マッピングの問題
UNICODE -> EUC-JP に変換した時に次のような変換が行われます。
nkf 2.0.6 で次のように修正されました。

                      NKF 2.0.4     NKF 2.0.5    NKF 2.0.6.
I    (U+0130)   (0x00)    削除     削除
' 
y   (U+00fd)   (0xc0)    削除     削除
-D  (U+00d0)   (0xc0)    削除     削除
_
E   (U+0114)   (0x00)    削除     削除
_
e   (U+0115)   @ (0x40)      削除     削除
'
g   (U+0123)   (0xc0)    削除     削除
'
O   (U+01fe)   (0xc0)    削除     削除
^
o   (U+01ff)   (0xc0)    削除     削除

\   (U+00a5)   (0xc0)    削除     (0xA1EF)
(c) (U+00a9)   (0x00)    (0x00)        削除
(R) (U+00ae)   (0x80)    削除     削除

* ここでテストした文字以外で不具合が生じる可能性はあります。

NKF 2.0.4 では誤変換が多く、特に 0x00 に変換されるのものは C 言語で取り扱う際に不都合が生じます。
NKF 2.0.5 ではほぼ理想的に変換できない文字が削除されていますが、(c)だけは例外で 0x00 に変換されてしまいます。
NKF 2.0.6 では、理想的にすべて削除されています。U+00A5 が 0xA1EF に変換されるのも好ましい変換です。

この部分に関しては、NKF 2.0.6 で問題が解決したので、NKF 2.0.6 を推奨としたいところですが、--fb-* でバグがあるようですので、推奨は先送りにしようかと思います。