Python 3 - 将 \xHH 十六进制值转换为 Unicode 的字符串
Python 3 - String with \xHH Hex Values to Unicode
我正在尝试转换一个字符串,其中包含需要多个十六进制值的字符:
'Mahou Shoujo Madoka\xe2\x98\x85Magica'
到它的 unicode 表示:
'Mahou Shoujo Madoka★Magica'
当我打印字符串时,它会尝试分别计算每个十六进制值,所以默认情况下我得到这个:
x = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
print(x)
Mahou Shoujo MadokaâMagica
所以我尝试了其他一些 Whosebug 答案,例如 Best way to convert string to bytes in Python 3?:
x = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
z = x.encode('utf-8')
print('z:', z)
y = z.decode('utf-8')
print('y:', y)
z: b'Mahou Shoujo Madoka\xc3\xa2\xc2\x98\xc2\x85Magica'
y: Mahou Shoujo MadokaâMagica
Python: Convert Unicode-Hex-String to Unicode:
z = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
x = binascii.unhexlify(binascii.hexlify(z.encode('utf-8'))).decode('utf-8')
print('x:', x)
x: Mahou Shoujo MadokaâMagica
还有其他一些,但其中 none 有效。我发现的大多数结果都是 的人,但其中 none 的人有我的确切问题。
我注意到的是,当我做 str.encode 时,它似乎在二进制文件中添加了一些额外的值(例如第一次尝试时 z 和 x 之间的差异),我不太清楚知道为什么。
所以我尝试手动将字符串的字符输入到二进制文件中:
x = b'Mahou Shoujo Madoka\xe2\x98\x85Magica'
x.decode('utf-8')
'Mahou Shoujo Madoka★Magica'
它奏效了。但是除了输入之外,我找不到从字面上将字符串转换为二进制的方法。我哪里错了?
在 Python3 中,您的原始字符串是 Unicode 字符串,但包含看起来像 UTF-8 的 Unicode 代码点,但解码不正确。要修复它:
>>> s = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
>>> type(s)
<class 'str'>
>>> s.encode('latin1')
b'Mahou Shoujo Madoka\xe2\x98\x85Magica'
>>> s.encode('latin1').decode('utf8')
'Mahou Shoujo Madoka★Magica'
latin1
编码恰好将 1:1 映射到 Unicode 中的前 256 个代码点,因此 .encode('latin1')
将代码点直接转换回字节。然后你可以 .decode('utf8')
字节正确。
我正在尝试转换一个字符串,其中包含需要多个十六进制值的字符:
'Mahou Shoujo Madoka\xe2\x98\x85Magica'
到它的 unicode 表示:
'Mahou Shoujo Madoka★Magica'
当我打印字符串时,它会尝试分别计算每个十六进制值,所以默认情况下我得到这个:
x = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
print(x)
Mahou Shoujo MadokaâMagica
所以我尝试了其他一些 Whosebug 答案,例如 Best way to convert string to bytes in Python 3?:
x = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
z = x.encode('utf-8')
print('z:', z)
y = z.decode('utf-8')
print('y:', y)
z: b'Mahou Shoujo Madoka\xc3\xa2\xc2\x98\xc2\x85Magica'
y: Mahou Shoujo MadokaâMagica
Python: Convert Unicode-Hex-String to Unicode:
z = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
x = binascii.unhexlify(binascii.hexlify(z.encode('utf-8'))).decode('utf-8')
print('x:', x)
x: Mahou Shoujo MadokaâMagica
还有其他一些,但其中 none 有效。我发现的大多数结果都是
我注意到的是,当我做 str.encode 时,它似乎在二进制文件中添加了一些额外的值(例如第一次尝试时 z 和 x 之间的差异),我不太清楚知道为什么。
所以我尝试手动将字符串的字符输入到二进制文件中:
x = b'Mahou Shoujo Madoka\xe2\x98\x85Magica'
x.decode('utf-8')
'Mahou Shoujo Madoka★Magica'
它奏效了。但是除了输入之外,我找不到从字面上将字符串转换为二进制的方法。我哪里错了?
在 Python3 中,您的原始字符串是 Unicode 字符串,但包含看起来像 UTF-8 的 Unicode 代码点,但解码不正确。要修复它:
>>> s = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
>>> type(s)
<class 'str'>
>>> s.encode('latin1')
b'Mahou Shoujo Madoka\xe2\x98\x85Magica'
>>> s.encode('latin1').decode('utf8')
'Mahou Shoujo Madoka★Magica'
latin1
编码恰好将 1:1 映射到 Unicode 中的前 256 个代码点,因此 .encode('latin1')
将代码点直接转换回字节。然后你可以 .decode('utf8')
字节正确。