2011-12-17 10 views
3

中国語のWebページを取得するためのlispプログラムを作成しています。バイナリストリームから中国語の構文解析に関する問題を抱えています。すでにページ全体を含む(unsigned-byte 8)のベクトルを持っていますが、それをbabel:octets-to-stringに置くと、例外がスローされます。babel:オクテットから文字列への無効化INVALID-UTF8-CONTINUATION-BYTE

(setfの緩衝液(バベル:オクテットツー列バッファ:エンコーディング:UTF-8))

例外がある:

不正:始まるUTF-8文字位置437 [ 型BABEL - エンコーディングの条件:INVALID-UTF8継続-BYTE]

私はそれが中国語の単語を満たしたときに、それはMUSという泉この例外をスローしません。どうすれば解決できますか?

答えて

6

エラーメッセージにはすべてが記載されています。データに無効なUTF-8バイトシーケンスがあります。

このエラーの最も一般的な原因は、ページテキスト自体がUTF-8でエンコードされていないことと、中国語のテキスト用にエンコードされていることです。 HTMLの 'META HTTP-EQUIV'タグと 'Content-Type' HTTP応答ヘッダーをチェックしてエンコードする必要があります。

+0

おかげさまで、エンコードをチェックして、あなたの言うとおりにページがGBKでエンコードされていましたが、GBKテキストを処理するにはどうすればよいですか? –

+0

BabelはGBKをサポートしていないようです。最良の方法は、GBKサポートをBabelに追加することです。しかし、即時の解決策として、Lisp実装提供のデコード機能を使用することができます。たとえば、SBCLで 'sb-ext:octets-to-string'関数を使用できます。 Clozure CLで 'ccl:decode-string-from-octets'を使うことができます –

+0

ありがとう、私は今、BabelがGBKをサポートするようにパッチを書いています。 –

関連する問題