Python - Unicode 到 ASCII 的转换

2024-05-19

我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII:

u'ABRA\xc3O JOS\xc9'

I tried encode and decode他们不会这么做。

有人有建议吗?


Unicode 字符u'\xce0' and u'\xc9'没有任何对应的 ASCII 值。因此,如果您不想丢失数据,则必须以某种有效的 ASCII 方式对该数据进行编码。选项包括:

>>> print s.encode('ascii', errors='backslashreplace')
ABRA\xc3O JOS\xc9
>>> print s.encode('ascii', errors='xmlcharrefreplace')
ABRAÃO JOSÉ
>>> print s.encode('unicode-escape')
ABRA\xc3O JOS\xc9
>>> print s.encode('punycode')
ABRAO JOS-jta5e

所有这些都是 ASCII 字符串,并且包含原始 Unicode 字符串中的所有信息(因此它们都可以反转而不会丢失数据),但对于最终用户来说,它们都不是那么漂亮(并且它们都不能只需通过以下方式即可逆转decode('ascii')).

See str.encode http://docs.python.org/2/library/stdtypes.html#str.encode, Python 特定编码 http://docs.python.org/2/library/codecs.html#python-specific-encodings, and 统一码指南 http://docs.python.org/2/howto/unicode.html了解更多信息。


顺便说一句,当有些人说“ASCII”时,他们实际上并不是指“ASCII”,而是“任何作为 ASCII 超集的 8 位字符集”或“我拥有的某些特定 8 位字符集”。头脑”。如果这就是您的意思,解决方案是编码为正确的 8 位字符集:

>>> s.encode('utf-8')
'ABRA\xc3\x83O JOS\xc3\x89'
>>> s.encode('cp1252')
'ABRA\xc3O JOS\xc9'
>>> s.encode('iso-8859-15')
'ABRA\xc3O JOS\xc9'

困难的部分是知道你指的是哪个字符集。如果您既要编写生成 8 位字符串的代码,又要编写使用它的代码,并且您不知道更好的情况,那么您指的是 UTF-8。如果使用 8 位字符串的代码是open功能或您正在为其提供页面的网络浏览器或其他东西,事情变得更加复杂,并且如果没有更多信息,就没有简单的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python - Unicode 到 ASCII 的转换 的相关文章

随机推荐