我在尝试将字符串编码为UTF-8时遇到了一些问题。我尝试过很多方法,包括使用string。编码('utf-8')
和unicode(字符串)
,但我得到了错误:
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)
我对mata在上的评论表示感谢https://stackoverflow.com/a/10561979/1346705还有尼克·克雷格·伍德的演示。您已正确解码字符串。问题在于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()
然后您将看到(。ω。)ノ
。
尝试:
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'
,这是正确的。
所以你的问题一定是在其他地方,可能如果你试图做一些事情,如果有一个隐式转换正在进行(可能是打印,写入流…)
要详细说明,我们需要看一些代码。
这与终端编码未设置为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变体的文档,了解如何使此更改永久化。
问题内容: 如何解决? 在其他基于python的静态博客应用中,中文帖子可以成功发布。像这个程序:http : //github.com/vrypan/bucket3。在我的网站http://bc3.brite.biz/中,中文帖子可以成功发布。 问题答案: tl;dr / quick fix 不要对Willy Nilly进行解码/编码 不要以为你的字符串是UTF-8编码的 尝试在代码中尽快将字符
如何修复它? 在其他一些基于python的静态博客应用程序中,可以成功发布中文帖子。例如此应用程序:http://github.com/vrypan/bucket3.在我的网站http://bc3.brite.biz/,可以成功发布中文帖子。
问题内容: 我有一个套接字服务器,应该从客户端接收UTF-8有效字符。 问题是某些客户端(主要是黑客)正在通过它发送所有错误的数据。 我可以轻松地区分真正的客户端,但是我会将所有发送的数据记录到文件中,以便以后进行分析。 有时我会得到这样的导致错误的字符。 我需要能够使带有或不带有这些字符的字符串UTF-8。 更新: 对于我的特殊情况,套接字服务是MTA,因此我只希望接收ASCII命令,例如: 我
我有一个套接字服务器,它应该从客户端接收UTF-8有效字符。 问题是一些客户端(主要是黑客)正在通过它发送所有错误类型的数据。 我可以很容易地分辨出真正的客户机,但我会将发送的所有数据记录到文件中,以便以后进行分析。 有时我会遇到这样的字符,导致UnicodeDecodeError错误。 我需要能够使字符串UTF-8有或没有这些字符。 更新: 对于我的特殊情况,套接字服务是MTA,因此我只希望接收
下面的代码为我提供了一个 UnicodeDecodeError:'utf-8'编解码器无法解码位置1的字节0xdb:无效的延续字节 类似的帖子也无济于事。
问题内容: 我正在尝试使用python 2.7.12从json文件读取twitter数据。 我使用的代码是这样的: 结果我得到: 我仔细研究了类似问题的所有答案,并想出了这段代码,它在上一次有效。我不知道为什么现在不起作用…我将不胜感激! 问题答案: 这对您没有帮助,这会使事情进一步混乱- 这是一个讨厌的黑客,您需要将其从代码中删除。 错误正在发生,因为是一个字符串,您正在调用。仅当字符串是Uni