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

Representing non-English characters with Unicode (UTF-8)

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

"Skr\u00E4ddarev\u00E4gen"

正确转换后的字符串应显示为 "Skräddarevägen"。我如何确保 unicode 十六进制值在输出时正确 encoded/decoded 并以正确的重音读取?

(注意,我使用的是 Requests 和 Pandas,两者的编码都设置为 utf-8) 提前致谢!

从你的显示来看,很难确定字符串中的内容。假设是显示的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'

如果您使用的是 Python 3 并且这实际上是字符串的内容,它 "just works":

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

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

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

将字符串写入文件,您必须在打开的文件中指定您想要的编码。