Python对UTF-8字符的编码出现问题了吗?

2024-06-25 07:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

相反,我得到了

^{pr2}$

字节号被一分为二,这样当将行写入一个文件,然后用Unicode编码打开它时,我得到的是“Þ”,而不是“Þ”。在

我如何强制Python编码\uC39E或{}这样的字符而不是{}?在


Tags: 字符串文本infohttp编码字节网站错误
1条回答
网友
1楼 · 发布于 2024-06-25 07:26:03

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

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

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

^{pr2}$

如果使用错误的编码解码,则会得到不同的Unicode码位。在本例中,U+00C3和U+017E。\xc3是Unicode码位的Unicode字符串中的一个转义码<;U+0100,而{}是代码点的转义码<;U+10000:

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

推荐阅读:

相关问题 更多 >