用Unicode表示非英文字符(UTF-8)

问题描述 投票:0回答:2

我正在使用Python中的HTML字符串,其中包含非英语字符,该字符串由字符串中的16位unicode十六进制值表示。该字符串显示:

"Skr\u00E4ddarev\u00E4gen"

正确转换后的字符串应为“Skräddarevägen”。如何确保unicode十六进制值在输出上正确编码/解码并使用正确的重音读取?

(注意,我正在使用请求和熊猫,并且两者中的编码都设置为utf-8)提前感谢!

python unicode encoding utf-8 decoding
2个回答
0
投票

如果您使用的是Python 3并且字面意思是字符串的内容,那么它“正常”:

>>> s = "Skr\u00E4ddarev\u00E4gen"
>>> s
'Skräddarevägen'

如果您将该字符串作为原始数据,则必须对其进行解码。如果它是Unicode字符串,则必须先将其编码为字节。最终结果将是Unicode。如果您已有字节字符串,请跳过编码步骤。

>>> s = r"Skr\u00E4ddarev\u00E4gen"
>>> s
'Skr\\u00E4ddarev\\u00E4gen'
>>> s.encode('ascii').decode('unicode_escape')
'Skräddarevägen'

如果您使用的是Python 2,则需要进行解码,并打印以正确查看:

>>> s = "Skr\u00E4ddarev\u00E4gen"
>>> s
'Skr\\u00E4ddarev\\u00E4gen'
>>> s.decode('unicode_escape')
u'Skr\xe4ddarev\xe4gen'
>>> print s.decode('unicode_escape')
Skräddarevägen

0
投票

从您的显示器中,很难确定字符串中的内容。假设显示的是24个字符,我相信下面的最后一行回答了你的问题。

s = "Skr\\u00E4ddarev\\u00E4gen"
print(len(s))
for c in s: print(c, end=' ')
print()
print(eval("'"+s+"'"))
print(eval("'"+s+"'").encode('utf-8'))

这打印

24
S k r \ u 0 0 E 4 d d a r e v \ u 0 0 E 4 g e n 
Skräddarevägen
b'Skr\xc3\xa4ddarev\xc3\xa4gen'
© www.soinside.com 2019 - 2024. All rights reserved.