M.Meiarashi
mes****@yki*****
2004年 8月 30日 (月) 22:48:24 JST
Gauche-0.8.1にて、シフトJISのjisx0213の文字を含んだテキストファイルを 操作するためeucに変換しようとして引っ掛かっています。 何か私が使い方を間違えているんじゃないかとも思うんですが、 ひょっとしてバグだったら私には直せないので、ご報告します。 NetBSD-i386のpkgsrcのgaucheの0.8.1を使っています。そのほか、 提示し足りない点があったら、ご指摘下さい。 あ、そもそもの私の使い方の間違いがあったらぜひご教示下さい。よろしくお願いします。 やってみたこと: 「崎」の異字体で作りの上のとこが大じゃなくて立のやつ(2面90区19点)を、 Shift_JIS (0xfab1) のファイルとして用意しました。 ---シェルのログ--- mes****@cinna***** $ pwd /tmp/charconv mes****@cinna***** $ ls s-fab1.txt* mes****@cinna***** $ hexdump -C s-fab1.txt 00000000 fa b1 |..| 00000002 mes****@cinna***** $ ---シェルのログ--- これを以下のプログラムに与えました。 ---プログラム--- (call-with-output-file "/tmp/charconv/e-8ffab3p.txt" (lambda (out) (copy-port (open-input-conversion-port (open-input-file "/tmp/charconv/s-fab1.txt") "shift-jis" :to-code "euc-jp") out))) ---プログラム--- このプログラムは終了しますが、出力結果が変だと思います。 ---シェルのログ--- mes****@cinna***** $ pwd /tmp/charconv mes****@cinna***** $ ls e-8ffab3p.txt s-fab1.txt* mes****@cinna***** $ hexdump -C e-8ffab3p.txt 00000000 8f 58 b3 |.X.| 00000003 mes****@cinna***** $ ---シェルのログ--- 0x8ffab3を期待していたのですが、0x8f58b3が出てきてます。 元の字はucsだと90ebなはずですが、ソース中の ext/charconv/euc-jp-2000-std.txt には、それは 0x8FFAB3だ、って書いてありますし、eucってたしか各バイトのMSBは1になると思うので、0x58は変だと思います。 あと、試しにutf8への変換も試みたのですが、こちらの結果はさらに混乱させられています。 ---プログラム2--- (call-with-output-file "/tmp/charconv/t-e983abp.txt" (lambda (out) (copy-port (open-input-conversion-port (open-input-file "/tmp/charconv/s-fab1.txt") "shift-jis" :to-code "utf8") out))) ---プログラム2--- すると、以下のエラーが出ます。 ---プログラム2の実行時のログ--- gosh> (call-with-output-file "/tmp/charconv/t-e983abp.txt" (lambda (out) (copy-port (open-input-conversion-port (open-input-file "/tmp/charconv/s-fab1.txt") "shift-jis" :to-code "utf8") out))) *** ERROR: invalid character sequence in the input stream: #*"\xfa\xb1" ... Stack Trace: _______________________________________ gosh> ---プログラム2の実行時のログ--- 入力が変、なのでしょうか? ちなみにt-e9883abp.txtは出来てますが、中身は空でした。 ---シェルのログ--- mes****@cinna***** $ ls -l /tmp/charconv/ total 1 -rw-r--r-- 1 mes wheel 3 Aug 30 21:18 e-8ffab3p.txt -rwxr--r-- 1 mes wheel 2 Aug 30 21:03 s-fab1.txt* -rw-r--r-- 1 mes wheel 0 Aug 30 21:40 t-e983abp.txt mes****@cinna***** $ ---シェルのログ--- ところで、私のもともとのプログラムでは、入力はshift-jisテキストののcsvでした。 こちらのデータとか正確なエラー出力はお出しできないのですが、問題の 「崎」の異体字のとこで、こんな感じのエラーがでます。 *** ERROR: Read error at "[conv(Shift_JIS->EUC_JISX0213) from #*"\" ---都合により削除--- /hogehoge.csv\"]":line 26: read-line: encountered illegal byte sequence: #*"\"FX\",|| ---都合により削除--- ||,\"\xbb\xb3\x8fX\xb3\"" 0x58のところで「#\X」と取られているんじゃないかと思います。 上の例で使った、s-fab1.txtを添付します。 ----- M. Meiarashi -- mes****@yki***** -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: s-fab1.txt 型: application/octet-stream サイズ: 2 バイト 説明: 無しDownload