python中的字符串与我的unicode? win32上的Python 3.2(r32:88445,2011年2月20日,21:29:02)[MSC v.1500 32位(英特尔)] 有关详细信息,请键入“copyright”、“credits”或“license()”。 >>>stru版本នយោបាយ' >>>类型(str_版本) >>>打印(str_版本) នយោបាយ >>>unicode_版本=នយោបាយ'.解码('utf-8') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 unicode_版本=នយោបាយ'.解码('utf-8') AttributeError:“str”对象没有属性“decode” >>>

python中的字符串与我的unicode? win32上的Python 3.2(r32:88445,2011年2月20日,21:29:02)[MSC v.1500 32位(英特尔)] 有关详细信息,请键入“copyright”、“credits”或“license()”。 >>>stru版本នយោបាយ' >>>类型(str_版本) >>>打印(str_版本) នយោបាយ >>>unicode_版本=នយោបាយ'.解码('utf-8') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 unicode_版本=នយោបាយ'.解码('utf-8') AttributeError:“str”对象没有属性“decode” >>>,python,unicode,python-3.x,Python,Unicode,Python 3.x,我的unicode字符串有什么问题?您的字符串没有问题!您只是混淆了encode()和decode()。字符串是有意义的符号。要将其转换为可以存储在文件中或通过Internet传输的字节,请使用类似UTF-8的编码使用encode()。每种编码都是一种将有意义的符号转换为平坦字节输出的方案 当需要做相反的事情时——从文件或套接字中提取一些原始字节,并将它们转换为字母和数字等符号——您将使用Python 3中bytestrings的decode()方法对字节进行解码 Python 3.2 (r32

我的unicode字符串有什么问题?

您的字符串没有问题!您只是混淆了
encode()
decode()
。字符串是有意义的符号。要将其转换为可以存储在文件中或通过Internet传输的字节,请使用类似UTF-8的编码使用
encode()
。每种编码都是一种将有意义的符号转换为平坦字节输出的方案

当需要做相反的事情时——从文件或套接字中提取一些原始字节,并将它们转换为字母和数字等符号——您将使用Python 3中bytestrings的
decode()
方法对字节进行解码

Python 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> str_version = 'នយោបាយ'
>>> type(str_version)
<class 'str'>
>>> print (str_version)
នយោបាយ
>>> unicode_version = 'នយោបាយ'.decode('utf-8')
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    unicode_version = 'នយោបាយ'.decode('utf-8')
AttributeError: 'str' object has no attribute 'decode'
>>> 
看到那个长长的字节行了吗?如果需要通过网络传输字符串或将其存储在文档中,UTF-8将使用这些字节来表示字符串。有许多其他的编码在使用,但它似乎是最流行的。每种编码都可以转换有意义的符号,如ន 及យោ 字节-计算机用来通信的小8位数字

>>> str_version = 'នយោបាយ'
>>> str_version.encode('utf-8')
b'\xe1\x9e\x93\xe1\x9e\x99\xe1\x9f\x84\xe1\x9e\x94\xe1\x9e\xb6\xe1\x9e\x99'

您正在阅读2.x文档
str.decode()
(和
bytes.encode()
)已在3.x中删除。而且
str
已经是一个Unicode字符串;不需要对其进行解码。

您已经有了一个unicode字符串。在Python3中,
str
是unicode字符串(Python2.x中是
unicode
),而单字节字符串(Python2.x
str
)不再被视为文本,它们现在被称为
字节
。后者可以通过其
解码
方法转换为
str
,但前者已经解码-您只能将其重新编码为
字节

仍然不干净。您能更清楚地解释一下吗?感谢Brandon Craig RhodesI添加了另一个段落和一些代码示例-这些示例是否使它更清晰了?现在已经清楚了。我现在从您的示例中理解了,非常感谢@Brandon Craig Rhodes
>>> rawbytes = str_version.encode('utf-8')
>>> rawbytes
b'\xe1\x9e\x93\xe1\x9e\x99\xe1\x9f\x84\xe1\x9e\x94\xe1\x9e\xb6\xe1\x9e\x99'
>>> rawbytes.decode('utf-8')
'នយោបាយ'