[Gauche-devel-jp] gauche.charconv (bug?)

Back to archive index

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 


Gauche-devel-jp メーリングリストの案内
Back to archive index