我的字符串是
u'3.4\xa2 / each'
'\xa2'
是"分"符号,我想以那种方式表现出来。
我试过
i= "3.4\xa2 / each"
print unicode(i, errors='replace')
在结果中,分号在实心圆圈内显示为问号。
我也试过
i= "3.4\xa2 / each"
print i.encode('utf-8')
我得到了
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa2 in position 3: ordinal not in range(128)
那么实现这个目标的正确方法是什么?
答案 0 :(得分:3)
'\xa2'
是字节。 可能被解释为分号,但前提是您指定了正确的编解码器。通过指定正确的编解码器,您可以将其解码为Unicode代码点等效项。 Latin-1会做:
>>> print '\xa2'.decode('latin1')
¢
但是有一整个series of encodings将¢
分代码点编码为A2。
或者,首先使用Unicode字符串开头。 Unicode字符串表达式中的\xa2
与\u00a2
相同,恰好是正确的代码点:
>>> print u'\xa2'
¢
>>> print u'\u00a2'
¢
那是因为Unicode标准的前256个码点恰好符合Latin-1(ISO-8859-1)标准。
您可能无法打印;如果您使用终端或控制台,print
应该自动编码Unicode数据以匹配您的终端或控制台配置,但这可能并不总是正确的或设置为可以处理您正在尝试的字符的编解码器打印!
请注意,我已解码。如果您编码,Python会尝试提供帮助,并首先将字节解码为Unicode对象,以便之后可以对其进行编码。由于\xa2
不是有效的ASCII字节,因此解码失败。
您可能需要阅读:
继续之前。
答案 1 :(得分:1)
几点:
encode
是一种将unicode字符串转换为字节的方法。如果在字节字符串上调用encode
,Python2将首先尝试使用ASCII对其进行解码,然后对其进行编码。这就是您的错误来自哪里。
您的字符串无法使用UTF-8解码,因为并非每个字节序列都是有效的UTF-8。
演示:
>>> "3.4\xa2 / each".decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa2 in position 3: invalid start byte
演示:
>>> print("3.4\xa2 / each".decode('latin-1'))
3.4¢ / each
答案 2 :(得分:-1)
您可以尝试:
print "3.4" + u"\u00A2" +"each"
适合我。