我有一个包含x='مصطفى'
之类的值的变量,我希望将其转换为u'مصطفى'
的形式,以便在某些函数中再次使用它...当我尝试u''+x
时它alawys给我一个错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 0: ordinal not in range(128)
有任何帮助吗?
答案 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-bidi
和arabic_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)