use*_*939 7 hex unicode-string unicode-escapes python-3.x
我试图转换一个字符串,其中包含需要多个十六进制值的字符,如下所示:
'Mahou Shoujo Madoka\xe2\x98\x85Magica'
Run Code Online (Sandbox Code Playgroud)
到它的unicode表示:
'Mahou Shoujo Madoka?Magica'
Run Code Online (Sandbox Code Playgroud)
当我打印字符串时,它会尝试分别评估每个十六进制值,所以默认情况下我得到这个:
x = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
print(x)
Mahou Shoujo MadokaâMagica
Run Code Online (Sandbox Code Playgroud)
所以我尝试了其他一些StackOverflow答案,例如在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
Run Code Online (Sandbox Code Playgroud)
Python:将Unicode-Hex-String转换为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
Run Code Online (Sandbox Code Playgroud)
还有一些,但没有一个有效.我发现的大部分结果都是有双反斜杠问题的人,但没有一个人有我的确切问题.
我注意到当我执行str.encode时,它似乎在二进制中添加了一些额外的值(例如第一次尝试中z和x之间的差异),我不太清楚为什么.
所以我尝试在二进制文件中手动输入字符串的字符:
x = b'Mahou Shoujo Madoka\xe2\x98\x85Magica'
x.decode('utf-8')
'Mahou Shoujo Madoka?Magica'
Run Code Online (Sandbox Code Playgroud)
它起作用了.但是除了输入外,我找不到从字符串转换为字符串的方法.我哪里错了?
在Python 3中,您的原始字符串是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'
Run Code Online (Sandbox Code Playgroud)
的latin1
编码恰好1映射:1至以Unicode前256个码点,所以.encode('latin1')
平移码点直接回字节.然后你可以.decode('utf8')
正确的字节.
归档时间: |
|
查看次数: |
2313 次 |
最近记录: |