我正在使用Python中的HTML字符串,其中包含非英语字符,该字符串由字符串中的16位unicode十六进制值表示。该字符串显示为:
"Skr\u00E4ddarev\u00E4gen"
正确转换后的字符串应为“Skräddarevägen”。如何确保unicode十六进制值在输出上正确编码/解码并使用正确的重音读取?
(注意,我正在使用请求和Pandas,两者中的编码都设置为utf-8) 提前谢谢!
答案 0 :(得分:4)
在Python 3中,可能会发生以下情况:
将字符串写到文件中,您必须在打开文件时指定所需的编码。
答案 1 :(得分: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'
答案 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