我知道对于Python< 3,字符串'Plants vs. Zombies‰¢2'的unicode编码如下:
u"Plants vs. Zombies䋢 2".encode("utf-8")
如果我有一个变量(比如appName)而不是字符串,我可以这样做:
appName = "Plants vs. Zombies䋢 2"
u+appName.encode("utf-8")
有关:
appName = appName.encode('utf-8');
'ascii' codec can't decode byte 0xe4 in position 18: ordinal not in range(128)
答案 0 :(得分:11)
没有。 u
表示法仅适用于字符串文字。包含字符串数据的变量不需要u
,因为该变量包含一个对象,该对象是unicode字符串或字节字符串。 (我假设appName
包含字符串数据;如果没有,则尝试对其进行编码没有意义。首先将其转换为字节字符串或unicode。)
因此,您的变量要么包含unicode字符串,要么包含字节字符串。如果它是一个unicode字符串,你可以appName.encode("utf-8")
。
如果它是一个字节字符串,那么它已经用一些编码进行了编码。如果它已经编码为UTF-8,那么它已经是你想要的了,你不需要做任何事情。如果它采用其他编码方式并且您希望将其转换为UTF-8,则可以执行appName.decode('the-existing-encoding').encode("utf-8")
。
请注意,如果您执行在编辑过的问题中显示的内容,结果可能与您的预期不同。你有:
appName = "Plants vs. Zombies䋢 2"
如果字符串文字没有u
,则您已经在某种编码中创建了一个字节串,即源文件的编码。如果你的源文件不是UTF-8,那么你就是我上面描述的最后一种情况。在将其创建为非unicode之后,无法“只创建一个字符串unicode”。当您将其创建为非unicode时,您将以特定编码创建它,并且您必须知道将其解码为unicode的编码(因此您可以根据需要将其编码为其他编码)。 / p>
答案 1 :(得分:2)
没有。 u前缀修改字符串常量的含义(使其成为unicode常量)。它不是一个运算符(可以应用于任何表达式)。
答案 2 :(得分:0)
我认为您可以尝试以下代码:
s = "Plants vs. Zombies䋢 2"
unicode(s, errors='ignore').encode('ascii')
它可以将任何字符串变量转换为unicode类型,默认使用'ascii',然后可以使用'ascii'对其进行编码,这将使该类型成为普通的字符串类型。
Python 3更新:
s.decode('ascii', 'ignore').encode('ascii')