用户可以使用Unicode阿拉伯语字符串

时间:2016-05-31 20:57:31

标签: python python-2.7 unicode decode

我有一个包含x='مصطفى'之类的值的变量,我希望将其转换为u'مصطفى'的形式,以便在某些函数中再次使用它...当我尝试u''+x时它alawys给我一个错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 0: ordinal not in range(128)

有任何帮助吗?

4 个答案:

答案 0 :(得分:2)

您必须知道这些字节的编码,并且.decode(encoding)它们才能获得Unicode字符串。如果您是从某些API收到的,utf8是一个很好的猜测。如果您从Windows记事本中键入的文件中读取字节,则更有可能是某些阿拉伯语(?)代码页。

PythonWin 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32.
>>> x='مصطفى' # "Just bytes" in whatever encoding my console uses
>>> x         # Looks like UTF-8.
'\xd9\x85\xd8\xb5\xd8\xb7\xd9\x81\xd9\x89'
>>> x.decode('utf8')  # Success
u'\u0645\u0635\u0637\u0641\u0649'
>>> print(x.decode('utf8'))
مصطفى

答案 1 :(得分:1)

谢谢我解决了它:)

解决方案是这样做

u''.encode('utf-8')+x

答案 2 :(得分:1)

有两件事。

首先x='مصطفى'的含义不明确,如果您将源文件保存为其他编码,则会更改。另一方面,x=u'مصطفى'.encode('utf-8')明确地表示“使用UTF-8编码该文本时获得的字节数”。

其次,使用字节'abc'b'abc'或unicode u'abc',但不要混用。在python 2.x中混合它们会产生结果,这取决于您执行该代码的位置。在python 3.x中它会引发错误(出于好的理由)。

所以给定一个字节串x,或者:

# bytes
'' + x

或:

# unicode, so decode the byte string
u'' + x.decode('utf-8')

答案 3 :(得分:0)

在python中有两个名为python-bidiarabic_reshaper的拖曳库,使用它们您可以编写阿拉伯文本而不会出现任何问题,隐藏字母或单独的字母等。

通过输入以下终端下载它们:pip install python-bidi, arabic_reshaper

示例:

import bidi.algorithm, arabic_reshaper

# To get arabic outputs in terminal or kivy or even pyGame etc.
reshaper = arabic_reshaper.reshape("أهلا وسهلا بكم")
bidi_text = bidi.algorithm.get_display(reshaper)
# "bidi_text" above makes python read from right to left like arabic language
print(bidi_text)

# Result in terminal:
>>>أهلا وسهلا بكم 

# To append arabic text in a text file:
File = open('av.txt', 'w',encoding='utf-8')
File.write(reshaper)