在python2.7中,我可以成功地将Unicode字符串"abc\udc34xyz"
转换为UTF-8(结果是"abc\xed\xb0\xb4xyz"
)。但是,当我把UTF-8字符串传递给例如pango_parse_markup()
或g_convert_with_fallback()
时,我会得到诸如“转换输入中的无效字节序列”之类的错误。显然,GTK/Pango函数检测字符串中的“未配对代理项”,并且(正确吗?)拒绝它。在
python3甚至不允许将Unicode字符串转换为UTF-8(错误:“'UTF-8'codec无法对位置3中的字符'\udc34'进行编码:不允许使用代理项”),但我可以运行"abc\udc34xyz".encode("utf8", "replace")
来获取有效的UTF8字符串,其中唯一的代理项被其他字符替换。这对我来说很好,但是我需要一个Python2的解决方案。在
所以问题是:在Python2.7中,如何将Unicode字符串转换为UTF-8,同时用U+FFFD等替换字符替换单独的代理项?最好只使用标准的Python函数和GTK/GLib/G。。。应该使用函数。在
顺便说一句,Iconv可以将字符串转换为UTF8,但只需删除错误字符,而不是用U+FFFD替换它。在
您可以在编码之前自己进行替换:
输出:
^{pr2}$以下是解决这个问题的方法:
invalid_string.encode('utf16').decode('utf16', 'replace')
我的理解是代理对是UTF-16的一部分,这就是为什么用UTF-8进行编码/解码没有任何作用。在
相关问题 更多 >
编程相关推荐