将unicode解码为字符串

时间:2014-07-09 19:07:05

标签: python python-2.7 utf-8 encode

我正在使用Pycharm和python2.7,我有一个unicode对象

u'\u0635\u062d\u064a\u0641\u0629 \u0625\u0645\u0627\u0631\u0627\u062a\u064a\u0629: \u062a\u0641\u0643\u064a\u0643 \u062e\u0644\u064a\u0629 \u0627\u0633\u062a\u062e\u0628\u0627\u0631\u0627\u062a\u064a\u0629 \u0642\u0637\u0631\u064a\u0629 \u062a\u0646\u0634\u0637 \u0641\u064a \u0623\u0628\u0648\xa0\u0638\u0628\u064a http:\\/\\/t.co\\/ygRZ0pfv7W'

我希望将其转换为普通字符串,但会引发以下错误:

>>> str2.decode('unicode_escape')
u'\u0635\u062d\u064a\u0641\u0629 \u0625\u0645\u0627\u0631\u0627\u062a\u064a\u0629: \u062a\u0641\u0643\u064a\u0643 \u062e\u0644\u064a\u0629 \u0627\u0633\u062a\u062e\u0628\u0627\u0631\u0627\u062a\u064a\u0629 \u0642\u0637\u0631\u064a\u0629 \u062a\u0646\u0634\u0637 \u0641\u064a \u0623\u0628\u0648\xa0\u0638\u0628\u064a http:\\/\\/t.co\\/ygRZ0pfv7W'
>>> print str2.decode('unicode_escape')
صحيفة إماراتية: تفكيك خلية استخباراتية قطرية تنشط في أبو ظبي http:\/\/t.co\/ygRZ0pfv7W
>>> str3 = str(str2.decode('unicode_escape'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

我该怎么办呢?

2 个答案:

答案 0 :(得分:2)

我认为您在使用str()时遇到了问题。

首先,请确保您了解Unicode字符串,字节字符串,编码和解码的概念。 Python 2.7 doc Unicode HOWTO是一个很好的起点。

其次,要了解您的表达式str2.decode()正在返回Unicode字符串。因此,你的表达

str3 = str(str2.decode(...))

要求Python使用默认编码器将该Unicode字符串转换为字节字符串。默认编码器是ASCII,无法转换阿拉伯字符。这就是Python为您提供错误消息的原因,“'ascii'编解码器无法对位置0..4中的字符进行编码。”

如果您希望str3是与str2对应的UTF-8编码字节字符串,请尝试:

str3_u = str2.decode(...)
str3   = str3_u.encode('utf8')

但是,你真的想要完成什么?如果str2已经是一个字节字符串,为什么要将它转换为Unicode字符串然后再转换为字节字符串?这个问题还有很多。

更新:删除对包含错误消息和Python版本文本的引用,因为提问者编辑了包含该信息的问题。谢谢!

答案 1 :(得分:0)

这里有一个unicode字符串的表示。该表示确保仅打印可打印字符。所以u'\u0635只是一个字符。代号为0635的字符。

>>> print u'\u0635\u062d\u064a\u0641\u0629 \u0625\u0645\u0627\u0631\u0627\u062a\u064a\u0629: \u062a\u0641\u0643\u064a\u0643 \u062e\u0644\u064a\u0629 \u0627\u0633\u062a\u062e\u0628\u0627\u0631\u0627\u062a\u064a\u0629 \u0642\u0637\u0631\u064a\u0629 \u062a\u0646\u0634\u0637 \u0641\u064a \u0623\u0628\u0648\xa0\u0638\u0628\u064a http:\\/\\/t.co\\/ygRZ0pfv7W'
صحيفة إماراتية: تفكيك خلية استخباراتية قطرية تنشط في أبو ظبي http:\/\/t.co\/ygRZ0pfv7W