Utf 8 babel:octets to string抛出无效的-UTF8-CONTINUATION-BYTE
我正在编写一个lisp程序来获取一个中文网站的网页,我遇到了从二进制流解析中文单词的问题,我已经有了一个包含整个网页的向量(无符号字节8),但当我把它放到babel:octets to string时,它抛出了一个异常 (setf缓冲区(巴别塔:八位字节到字符串缓冲区:编码:utf-8)) 例外情况是: 非法:从437位置开始的UTF-8字符。[情况 键入BABEL-ENCODINGS:INVALID-UTF8-CONTINUATION-BYTE]Utf 8 babel:octets to string抛出无效的-UTF8-CONTINUATION-BYTE,utf-8,lisp,common-lisp,sbcl,babeljs,Utf 8,Lisp,Common Lisp,Sbcl,Babeljs,我正在编写一个lisp程序来获取一个中文网站的网页,我遇到了从二进制流解析中文单词的问题,我已经有了一个包含整个网页的向量(无符号字节8),但当我把它放到babel:octets to string时,它抛出了一个异常 (setf缓冲区(巴别塔:八位字节到字符串缓冲区:编码:utf-8)) 例外情况是: 非法:从437位置开始的UTF-8字符。[情况 键入BABEL-ENCODINGS:INVALID-UTF8-CONTINUATION-BYTE] 我发现当它遇到一个中文单词时,它必须扔掉这个例
我发现当它遇到一个中文单词时,它必须扔掉这个例外。如何解决此问题?错误消息说明了一切-数据中存在无效的UTF-8字节序列
此错误最可能的原因是页面文本本身不是用UTF-8编码的,而是其他一些中文文本编码。您应该检查HTML“META HTTP-EQUIV”标记和“Content Type”HTTP响应头的编码。谢谢,我检查了编码,发现它与您所说的一样,页面是用GBK编码的,但是我如何处理GBK文本,我应该编写自己的解码方法吗?巴贝尔似乎不支持GBK。最好的方法是向Babel添加GBK支持。但作为一个即时解决方案,您可以使用Lisp实现提供的解码功能。例如,在SBCL中,您可以使用
sb ext:octets来字符串函数;在Clozure CL中,您可以使用ccl:decode string from octets
非常感谢,我现在正在编写一个补丁,使Babel支持GBK。