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

时间:2018-01-02 22:41:25

标签: python unicode encoding utf-8 decoding

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

"Skr\u00E4ddarev\u00E4gen"

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

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

3 个答案:

答案 0 :(得分:4)

在Python 3中,可能会发生以下情况:

  1. 如果您从HTML文件中提取字符串,则必须读入 使用正确的编码的HTML文件。
  2. 如果您的字符串使用Python 3代码编写,则它在内存中应该已经是Unicode(32位)格式。

将字符串写到文件中,您必须在打开文件时指定所需的编码。

答案 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