变量的Python字符串编码

时间:2013-11-25 21:03:38

标签: python unicode encoding

我知道对于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)

3 个答案:

答案 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')

https://docs.python.org/2/howto/unicode.html

Best way to convert string to bytes in Python 3?