Python unicode 字符串

Python unicode strings

我是一个 Python 新手,我正在尝试制作一个脚本,如果有差异,它会在文件中写入一些字符串。问题是原始字符串中有一些 \uNNNN Unicode 格式的字符,我无法将新字符串转换为相同的 Unicode 格式。

我要比较的原始字符串:\u00A1 ATENCI\u00D3N! \u25C4

收到的新字符串为:¡ ATENCIÓN! ◄

这是代码

str = u'¡ ATENCIÓN! ◄'
print(str)
str1 = str.encode('unicode_escape')
print (str1)
str2 = str1.decode()
print (str2)

结果是:

¡ ATENCIÓN! ◄
b'\xa1 ATENCI\xd3N! \u25c4'
\xa1 ATENCI\xd3N! \u25c4

那么,我怎样才能将 \xa1 ATENCI\xd3N! \u25c4 转换为 \u00A1 ATENCI\u00D3N! \u25C4,因为这是我唯一可以保存的 Unicode 格式?

注意:字符串中字符的大小写也需要相同才能比较

问题是,根据 the docs(在转义序列表之间向下阅读一点),\u\U\N Unicode转义序列 仅在字符串文字 中被识别。这意味着一旦文字在内存中被评估,例如在变量赋值中:

s = "\u00A1 ATENCI\u00D3N! \u25C4"

任何尝试 str.encode() 它会自动将其转换为使用 \x 的字节对象,它可以:

b'\xa1 ATENCI\xd3N! \u25c4'

正在使用

b'\xa1 ATENCI\xd3N! \u25c4'.decode("unicode_escape")

会将其转换回 '¡ ATENCIÓN! ◄'。这使用字符的实际(预期)表示,而不是原始字符串 s.

\uXXXX 转义序列

所以,你应该做的是而不是乱搞编码和解码的事情。观察:

print("\u00A1 ATENCI\u00D3N! \u25C4" == '¡ ATENCIÓN! ◄')
True

这就是您需要做的所有比较。

如需进一步阅读,您可能对以下内容感兴趣: