2024-06-16 14:40:38 发布
网友
我有一个包含诸如“\xaf”、“\xbe”等字符的文本,据我从this question中了解,这些字符是ASCII编码的字符。
我想用Python把它们转换成UTF-8的等价物。通常的string.encode("utf-8")抛出UnicodeDecodeError。有没有更好的方法,例如使用codecs标准库?
string.encode("utf-8")
UnicodeDecodeError
codecs
样品200 characters here。
它不是ASCII码(ASCII码只上升到127;\xaf是175)。你首先需要找出正确的编码,解码,然后用UTF-8重新编码。
\xaf
你能提供一个实际的字符串样本吗?然后我们就可以猜出当前的编码。
您的文件已经是UTF-8编码的文件。
# saved encoding-sample to /tmp/encoding-sample import codecs fp= codecs.open("/tmp/encoding-sample", "r", "utf8") data= fp.read() import unicodedata as ud chars= sorted(set(data)) for char in chars: try: charname= ud.name(char) except ValueError: charname= "<unknown>" sys.stdout.write("char U%04x %s\n" % (ord(char), charname))
并手动填写未知名称: char U000a换行 字符U001e信息分隔符2 字符U001f信息分隔符一
.encode用于将Unicode字符串(2.x中的unicode,3.x中的str)转换为字节字符串(2.x中的str,3.x中的bytes)。
.encode
unicode
str
bytes
在2.x中,对str对象调用.encode是合法的。Python首先隐式地将字符串解码为Unicode:s.encode(e)就像您已经编写了s.decode(sys.getdefaultencoding()).encode(e)。
s.encode(e)
s.decode(sys.getdefaultencoding()).encode(e)
问题是默认编码是“ascii”,并且字符串包含非ascii字符。可以通过显式指定正确的编码来解决此问题。
>>> '\xAF \xBE'.decode('ISO-8859-1').encode('UTF-8') '\xc2\xaf \xc2\xbe'
它不是ASCII码(ASCII码只上升到127;
\xaf
是175)。你首先需要找出正确的编码,解码,然后用UTF-8重新编码。你能提供一个实际的字符串样本吗?然后我们就可以猜出当前的编码。
您的文件已经是UTF-8编码的文件。
并手动填写未知名称:
char U000a换行
字符U001e信息分隔符2
字符U001f信息分隔符一
.encode
用于将Unicode字符串(2.x中的unicode
,3.x中的str
)转换为字节字符串(2.x中的str
,3.x中的bytes
)。在2.x中,对
str
对象调用.encode
是合法的。Python首先隐式地将字符串解码为Unicode:s.encode(e)
就像您已经编写了s.decode(sys.getdefaultencoding()).encode(e)
。问题是默认编码是“ascii”,并且字符串包含非ascii字符。可以通过显式指定正确的编码来解决此问题。
相关问题 更多 >
编程相关推荐