变量的Python字符串编码

Sid*_*kan 9 python unicode encoding

我知道对于Python <3,字符串'Plants vs. Zombies‰2'的unicode编码如下:

u"Plants vs. Zombies䋢 2".encode("utf-8")
Run Code Online (Sandbox Code Playgroud)

如果我有一个变量(比如appName)而不是字符串,我可以这样做:

  appName = "Plants vs. Zombies䋢 2"
 u+appName.encode("utf-8")
Run Code Online (Sandbox Code Playgroud)

对于:

 appName = appName.encode('utf-8');


 'ascii' codec can't decode byte 0xe4 in position 18: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 11

号的u符号是只为字符串文字.包含字符串数据u的变量不需要,因为变量包含一个对象,该对象是unicode字符串或字节字符串.(我假设这里appName包含字符串数据;如果没有,则尝试对其进行编码没有意义.首先将其转换为bytestring或unicode.)

因此,您的变量要么包含unicode字符串,要么包含字节字符串.如果它是一个unicode字符串,你可以做appName.encode("utf-8").

如果它是一个字节串,那么它已经用一些编码进行了编码.如果它已经编码为UTF-8,那么它已经是你想要的了,你不需要做任何事情.如果它在某些其他编码中并且您想要将其转换为UTF-8,则可以执行此操作appName.decode('the-existing-encoding').encode("utf-8").

请注意,如果您执行在编辑过的问题中显示的内容,结果可能与您的预期不同.你有:

appName = "Plants vs. Zombies䋢 2"
Run Code Online (Sandbox Code Playgroud)

如果没有u字符串文字,则在某些编码中创建了一个字节串,即源文件的编码.如果你的源文件不是UTF-8,那么你就是我上面描述的最后一种情况.在将其创建为非unicode之后,无法"只创建一个字符串unicode".当您将其创建为非unicode时,您将以特定编码创建它,并且您必须知道将其解码为unicode的编码(因此您可以根据需要将其编码为其他编码).