Adr*_*ida 13 python unicode encoding ascii
我无法将以下Unicode转换为ASCII而不会丢失数据:
u'ABRA\xc3O JOS\xc9'
Run Code Online (Sandbox Code Playgroud)
我试过了encode,decode他们不会这样做.
有没有人有建议?
aba*_*ert 38
Unicode字符u'\xce0'并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
Run Code Online (Sandbox Code Playgroud)
所有这些都是ASCII字符串,并包含原始Unicode字符串中的所有信息(因此它们都可以在不丢失数据的情况下被反转),但它们都不是最终用户的所有信息(并且它们都不能只是通过decode('ascii')).
见str.encode,Python中的特定编码,和Unicode指南获取更多信息.
作为旁注,当有人说"ASCII"时,它们实际上不是指"ASCII",而是"任何8位字符集,它是ASCII的超集"或"我所拥有的某些特定的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'
Run Code Online (Sandbox Code Playgroud)
困难的部分是知道你的意思是哪个字符集.如果您正在编写生成8位字符串的代码和使用它的代码,并且您不知道更好,那么您的意思是UTF-8.如果使用8位字符串的代码是,例如,open您正在为页面或其他内容提供服务的函数或Web浏览器,则事情会更复杂,如果没有更多信息,则没有简单的答案.
| 归档时间: |
|
| 查看次数: |
43707 次 |
| 最近记录: |