我在尝试将字符串编码为UTF-8时遇到了一些问题。我尝试了很多方法,包括使用string.encode('utf-8')
和unicode(string)
,但是我得到了错误:
UnicodeDecodeError:'ascii‘编解码器无法解码位置1中的字节0xef :序数不在范围内(128)
这是我的字符串:
(。・ω・。)ノ
我看不出出了什么问题,你知道吗?
编辑:问题是按原样打印字符串不能正确显示。另外,当我尝试转换它时,也会出现这个错误:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
发布于 2012-05-12 19:05:58
这与终端的编码未设置为UTF-8有关。这是我的终端机
$ echo $LANG
en_GB.UTF-8
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
(。・ω・。)ノ
>>>
在我的终端上,这个示例可以使用上面的设置,但是如果我去掉了LANG
设置,那么它就不能工作
$ unset LANG
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
>>>
请参考您的linux变体的文档,以了解如何使此更改永久生效。
发布于 2012-05-12 15:53:01
尝试:
string.decode('utf-8') # or:
unicode(string, 'utf-8')
编辑:
'(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'.decode('utf-8')
给出了u'(\uff61\uff65\u03c9\uff65\uff61)\uff89'
,这是正确的。
所以你的问题一定出在别的地方,如果你试图用它做一些事情,因为有一个隐式的转换正在进行(可能是打印,写入到流中……)
为了说得更多,我们需要看一些代码。
发布于 2012-05-12 19:43:09
我+1感谢马塔在https://stackoverflow.com/a/10561979/1346705上的评论和Nick Craig-Wood的演示。您已经正确地解码了字符串。问题出在print
命令将Unicode字符串转换为控制台编码时,而控制台无法显示该字符串。尝试将字符串写入一个文件,并使用一些支持Unicode的像样的编辑器查看结果:
import codecs
s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
s1 = s.decode('utf-8')
f = codecs.open('out.txt', 'w', encoding='utf-8')
f.write(s1)
f.close()
然后,您将看到(。・ω・。)ノ
。
https://stackoverflow.com/questions/10561923
复制相似问题