Python Unicode阿拉伯文字符串以供用户使用

Python Unicode阿拉伯文字符串以供用户使用,python,python-2.7,unicode,decode,Python,Python 2.7,Unicode,Decode,我有一个变量,它包含一个值,比如x='طفى,我想把它转换成u'مطى的形式,以便在某些函数中再次使用它。。当我尝试执行u'+x时,它总是给我一个错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 0: ordinal not in range(128) 有什么帮助吗 谢谢,我解决了:) 解决办法是这样做 u''.encode('utf-8')+x 谢谢,我解决了:) 解决办法是这样做 u''.en

我有一个变量,它包含一个值,比如
x='طفى
,我想把它转换成
u'مطى
的形式,以便在某些函数中再次使用它。。当我尝试执行
u'+x
时,它总是给我一个错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 0: ordinal not in range(128)
有什么帮助吗

谢谢,我解决了:)

解决办法是这样做

u''.encode('utf-8')+x
谢谢,我解决了:)

解决办法是这样做

u''.encode('utf-8')+x
有两件事

首先,
x='مطفى
的含义定义不清,如果将源文件保存为另一种编码,则会发生变化。另一方面,
x=u'مطفى'。encode('utf-8')
明确地表示“用utf-8编码文本时得到的字节”

其次,可以使用字节
'abc'
b'abc'
或unicode
u'abc'
,但不要将它们混用。在Python2.x中混合使用它们会产生依赖于代码执行位置的结果。在Python3.x中,它会引发一个错误(有充分的理由)

因此,给定一个字节字符串
x
,或者:

# bytes
'' + x
或:

有两件事

首先,
x='مطفى
的含义定义不清,如果将源文件保存为另一种编码,则会发生变化。另一方面,
x=u'مطفى'。encode('utf-8')
明确地表示“用utf-8编码文本时得到的字节”

其次,可以使用字节
'abc'
b'abc'
或unicode
u'abc'
,但不要将它们混用。在Python2.x中混合使用它们会产生依赖于代码执行位置的结果。在Python3.x中,它会引发一个错误(有充分的理由)

因此,给定一个字节字符串
x
,或者:

# bytes
'' + x
或:


您必须知道这些字节的编码方式,以及它们
。解码(编码)
以获得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'))
مصطفى

您必须知道这些字节的编码方式,以及它们
。解码(编码)
以获得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'))
مصطفى

python中有两个库,分别称为
python bidi
arabic_reformer
,使用它们,您可以编写阿拉伯文文本,而不会出现任何问题、隐藏字母或单独字母等

通过输入terminal:
pip install python bidi,阿拉伯语

例如:

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)

python中有两个库,分别称为
python bidi
arabic_reformer
,使用它们,您可以编写阿拉伯文文本,而不会出现任何问题、隐藏字母或单独字母等

通过输入terminal:
pip install python bidi,阿拉伯语

例如:

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)

不,这很糟糕。阅读Unicode指南:不,这很糟糕。阅读Unicode指南:bytestring的
x
源代码是什么?(您是从文件中读取的吗?从网络接收吗?)您应该在程序中获得它后立即将其转换为Unicode(使用适当的字符编码,这取决于值的来源)。bytestring的
x
源代码是什么?(您是从文件中读取的吗?从网络接收吗?)您应该在程序中获得它后立即将其转换为Unicode(使用适当的字符编码,这取决于值的来源)。