Python3: 解码 UTF-8 字节转换为字符串

Python3: Decode UTF-8 bytes converted as string

假设我有这样的东西:

a = "Gżegżółka"
a = bytes(a, 'utf-8')
a = str(a)

哪个 returns 形式的字符串:

b'G\xc5\xbceg\xc5\xbc\xc3\xb3\xc5\x82ka'

现在它作为简单字符串发送(我从 eval 函数得到它作为断言)。我现在怎么才能得到正常的 UTF-8 格式的起始词呢?如果有比 str(bytes(x)) 更好的压缩,那么我会很高兴听到。

如果您想对文本进行编码和解码,这就是 encode and decode 方法的用途:

>>> a = "Gżegżółka"
>>> b = a.encode('utf-8')
>>> b
b'G\xc5\xbceg\xc5\xbc\xc3\xb3\xc5\x82ka'
>>> c = b.decode('utf-8')
>>> c
'Gżegżółka'

另外,注意 UTF-8 已经是默认的,所以你可以这样做:

>>> b = a.encode()
>>> c = b.decode()

您需要指定参数的唯一原因是:

  • 您需要使用其他编码而不是 UTF-8,
  • 您需要指定一个特定的错误处理程序,例如 'surrogatereplace' 而不是 'strict',或者
  • 您的代码必须 运行 Python 3.0-3.1(几乎没有人使用)。

但是,如果您真的想要,您可以做您已经在做的事情;您只需要在 str 调用中明确指定编码,就像您在 bytes 调用中所做的那样:

>>> a = "Gżegżółka"
>>> b = bytes(a, 'utf-8')
>>> b
b'G\xc5\xbceg\xc5\xbc\xc3\xb3\xc5\x82ka'
>>> c = str(b, 'utf-8')
>>> c

像您一样在没有编码的情况下对 bytes 对象调用 str,不会对其进行解码,也不会像调用 bytes 那样引发异常str 没有编码,因为 str 的主要工作是为您提供对象的字符串表示形式,而 bytes 对象的最佳字符串表示形式是 b'…' .

我找到了。将字节的字符串表示再次转换为字节的最简单方法是通过 eval 语句:

a = "Gżegżółka"
a = bytes(a, 'utf-8')
a = str(a) #this is the input we deal with

a = eval(a) #that's how we transform a into bytes
a = str(a, 'utf-8') #...and now we convert it into string

print(a)