繁体   English   中英

Python对UTF-8字符的编码是否错误?

[英]Python gets the wrong encoding for UTF-8 characters?

我正在尝试从网站获取带有特殊字符的文本,因此Python返回的字符串充满了“ \\ x”字符。 但是,似乎编码是错误的。 例如,在获取时:

th =urllib2.urlopen('http://norse.ulver.com/dct/zoega/th.html')

网页<h1>级别的行应包含字母“Þ”,根据http://www.fileformat.info/info/charset/UTF-8/list.htm ,其字节数为C39E和Unicode代码DE

相反,我得到

'<h1>\xc3\x9e</h1>'

字节数一分为二,以便将行写入文件然后以Unicode编码打开时,得到的是“Þ”而不是“Þ”。

如何强制Python将\쎞\\xde等字符编码为\\xc3\\x9e

这是U + 00DE的正确UTF-8 字节编码,需要两个字节来表示( \\xc3\\x9e ),但是您需要将其解码为Unicode才能看到Unicode代码点:

>>> '<h1>\xc3\x9e</h1>'.decode('utf8')
u'<h1>\xde</h1>'

上面是一个Unicode字符串,显示了正确的Unicode代码点。 在UTF-8控制台上进行打印:

>>> print '<h1>\xc3\x9e</h1>'.decode('utf8')
<h1>Þ</h1>

如果您使用错误的编码来解码,则会得到不同的Unicode代码点。 在这种情况下,U + 00C3和U + 017E。 \\xc3是Unicode字符串<U + 0100的Unicode字符串中的转义代码 ,而是<U + 10000的代码点的一个:

>>> '<h1>\xc3\x9e</h1>'.decode('cp1252')
u'<h1>\xc3\u017e</h1>'
>>> print '<h1>\xc3\x9e</h1>'.decode('cp1252')
<h1>Þ</h1>

推荐阅读:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM