「地震マンマン」半袖和柄Tシャツ/ニット/鯰/でこぼこプリント/日本製/綿100%/白・黒 ― 2005年11月26日 04時05分18秒
NKF の UNICODE -> EUC-JP 変換における問題 ― 2005年11月26日 21時03分48秒
NKF における UNICODE マッピングの問題
UNICODE -> EUC-JP に変換した時に次のような変換が行われます。
NKF 2.0.4 NKF 2.0.5 開発中のNKF
.
I (U+0130) (0x00) 削除 削除
'
y (U+00fd) (0xc0) 削除 y (0x79)
-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) 削除 \ (0x5c)
(c) (U+00a9) (0x00) (0x00) c (0x63)
(R) (U+00ae) (0x80) 削除 R (0x52)
* ここでテストした文字以外でも不具合が生じる可能性はあります。
NKF 2.0.4 では誤変換が多く、特に 0x00 に変換されるのものは C 言語で取り扱う際に不都合が生じます。
NKF 2.0.5 ではほぼ理想的に変換できない文字が削除されていますが、(c)だけは例外で 0x00 に変換されてしまいます。 開発中のNKF(2005/11/26現在のバージョン)では、UNICODE の正規化処理が入り、字形の近い別の文字に変換されてしまっています。
NKF 2.0.5 ではほぼ理想的に変換できない文字が削除されていますが、(c)だけは例外で 0x00 に変換されてしまいます。 開発中のNKF(2005/11/26現在のバージョン)では、UNICODE の正規化処理が入り、字形の近い別の文字に変換されてしまっています。
このまま 2.0.6 としてリリースされると、いろいろ混乱が生じるかもしれません。
\ (U+00a5) が \ (0x5c) に変換される 円問題 は、Windows 環境においてパス区切り文字に変換されることを意味します。
また、字形の近い別のアルファベットに変換される問題は、Windows 環境において、DDN に変換される危険性をはらんでいます。
これらは逆変換が不可能なため、変換後に排除するのは困難です。
\ (U+00a5) が \ (0x5c) に変換される 円問題 は、Windows 環境においてパス区切り文字に変換されることを意味します。
また、字形の近い別のアルファベットに変換される問題は、Windows 環境において、DDN に変換される危険性をはらんでいます。
これらは逆変換が不可能なため、変換後に排除するのは困難です。
NMZ.w, NMZ.wi の簡易チェックプログラムnmzchkw.pl ― 2005年11月26日 23時52分05秒
NMZ.w, NMZ.wi の簡易チェックプログラムを作成しました。
インデックスのあるディレクトリに移動して、実行します。
$ cd パス
$ perl nmzchkw.pl
==============================
check 1
==============================
nul : 0
control : 0
cr : 0
0x80 - 0xff : 25
ok
==============================
check 2
==============================
lf : 271
NMZ.w: words : 271
NMZ.wi: words : 271
ok
==============================
check 3
==============================
ok
==============================
All check passed.
"All check passed."と表示されると(簡易チェックでは)NMZ.w, NMZ.wi が正常だということになります。
インデックスのあるディレクトリに移動して、実行します。
$ cd パス
$ perl nmzchkw.pl
==============================
check 1
==============================
nul : 0
control : 0
cr : 0
0x80 - 0xff : 25
ok
==============================
check 2
==============================
lf : 271
NMZ.w: words : 271
NMZ.wi: words : 271
ok
==============================
check 3
==============================
ok
==============================
All check passed.
"All check passed."と表示されると(簡易チェックでは)NMZ.w, NMZ.wi が正常だということになります。
最近のコメント