【问题标题】:babel:octets-to-string throws out INVALID-UTF8-CONTINUATION-BYTEbabel:octets-to-string 抛出 INVALID-UTF8-CONTINUATION-BYTE
【发布时间】:2012-01-22 15:57:51
【问题描述】:

我正在编写一个 lisp 程序来获取一个中文网站的网页,我遇到了从二进制流中解析中文单词的问题,我已经有一个包含整个页面的 (unsigned-byte 8) 向量,但是当我把它放到 babel:octets-to-string 中时,它会抛出一个异常。

(setf buffer (babel:octets-to-string buffer :encoding :utf-8))

例外是:

非法 :UTF-8 字符从位置 437 开始。[条件 输入 BABEL-ENCOdingS:INVALID-UTF8-CONTINUATION-BYTE]

我发现当它遇到一个中文单词时它必须抛出这个异常。我该如何解决?

【问题讨论】:

    标签: utf-8 lisp common-lisp sbcl babeljs


    【解决方案1】:

    错误消息说明了一切 - 您的数据中存在无效的 UTF-8 字节序列。

    这个错误最可能的原因是页面文本本身不是用UTF-8编码的,而是中文文本的一些其他编码。您应该检查 HTML 'META HTTP-EQUIV' 标记和 'Content-Type' HTTP 响应标头的编码。

    【讨论】:

    • 谢谢,我检查了编码,发现和你说的一样,页面是用GBK编码的,但是如何处理GBK文本,我应该编写自己的解码方法吗?
    • 好像Babel不支持GBK。最好的方法是为 Babel 添加 GBK 支持。但作为一个直接的解决方案,您可以使用 Lisp 实现提供的解码功能。例如,在 SBCL 中可以使用sb-ext:octets-to-string 函数;在 Clozure CL 中你可以使用ccl:decode-string-from-octets
    • 非常感谢,我现在正在写一个补丁让 Babel 支持 GBK。
    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2020-03-01
    • 2018-04-21
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多