フォーラム: 公開討議 (スレッド #32783)

CP50221 から CP932 に変換できない文字がある (2012-09-12 23:34 by tmtm #65482)

Ruby の方に http://bugs.ruby-lang.org/issues/7005 で報告したのですが、NKF の問題のようなのでこちらで。

NKF で CP50221 から CP932 に変換できない文字があります。
CP932 で 0xF040 から 0xF9FC までの文字のうち 589 文字が変換できません。
どうやら CP50221 で1バイト目が 0x80 以上で2バイト目が 0x21-0x3F の文字が変換できないようです。

% printf "\x1b\x24\x42\x7f\x21\x80\x21\x1b\x28\x42\n" | nkf --ic=CP50221 --oc=CP932 | od -tx1c
0000000 f0 40 0a
360 @ \n
0000003

7F21 は F040 に変換できていますが、8021 は F09F になるべきなのに落ちています。

v2_0_8 では変換できていたので、 git bisect で調べたところ e013ea95a47d82bd8e0edd541ef441d90232f3ff からできなくなったようです。

このコミットから見よう見まねで次のパッチを適用したら直りました(が、これでいいのかよく分かってません)。

diff --git a/nkf.c b/nkf.c
index 5209864..1fb5f79 100644
--- a/nkf.c
+++ b/nkf.c
@@ -5491,7 +5491,7 @@ kanji_convert(FILE *f)
code_status(c1);
if (c2) {
/* second byte */
- if (c2 > DEL) {
+ if (c2 > ((input_encoding && nkf_enc_cp5022x_p(input_encoding)) ? 0x92 : DEL)) {
/* in case of 8th bit is on */
if (!estab_f&&!mime_decode_mode) {
/* in case of not established yet */

メッセージ #65482 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: CP50221 から CP932 に変換できない文字がある (2012-09-13 19:42 by naruse #65487)

ありがとうございます、それでよいと思います。
50a383c848f1c8c4e107ed68c3e839ff95f275a6 で取り込みました。
#65482 への返信

メッセージ #65487 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする