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)
假设我有这样的东西:
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)