Python 2字符串以某种方式保存为纯Unicode

Python 2字符串以某种方式保存为纯Unicode,python,unicode,encoding,utf-8,Python,Unicode,Encoding,Utf 8,我有以下中文字符串,它们以以下形式保存为“str”类型: \u72ec\u5230 \u7528\u8272 我使用的是Python 2.7,当我打印这些字符串时,它们被打印为实际的中文字符: chinese_list = ["\u72ec\u5230", "\u7528\u8272", "\u72ec"] print(chinese_list[0], chinese_list[1], chinese_list[2]) >>> 独到 用色 独 我真的不知道它们是如何以那种形式

我有以下中文字符串,它们以以下形式保存为“str”类型:
\u72ec\u5230
\u7528\u8272

我使用的是Python 2.7,当我打印这些字符串时,它们被打印为实际的中文字符:

chinese_list = ["\u72ec\u5230", "\u7528\u8272", "\u72ec"]
print(chinese_list[0], chinese_list[1], chinese_list[2])
>>> 独到 用色 独
我真的不知道它们是如何以那种形式保存的,对我来说,它看起来像Unicode。我们的目标是将我拥有的其他汉字保存在同一种编码中。“说我有”国道" 我需要以与原始
中文列表
相同的方式保存它们

我尝试将其编码为utf-8和其他编码,但从未获得与原始编码相同的输出:

new_string = u"国道"
print(new_string.encode("utf-8"))
# >>> b'\xe5\x9b\xbd\xe9\x81\x93'
print(new_string.encode("utf-16"))
# >>> b'\xff\xfe\xfdVS\x90'
感谢您的帮助

编辑:它不必有两个汉字

EDIT2:显然,编码是
unicode escape
。谢谢@deceze

print(u"国".encode('unicode-escape'))
>>> \u56fd

\u…
是unicode转义语法。其工作原理类似于
\n
是换行符,而不是两个字符
\
n

列表中的元素实际上从不包含具有
\
u
7
等文字字符的字节字符串。它们包含具有实际unicode字符的unicode字符串,即
等等。
请注意,这仅适用于unicode字符串!在Python2中,您需要编写
u”\u…“
。Python3始终使用unicode字符串

字符的unicode转义值可以通过
ord
内置来获取。例如,
ord(u)国“
给出了
22269
-与
0x56fd
相同的值。 要获取hexadezimal转义值,请将结果转换为hex

>>> def escape_literal(character):
...     return r'\u' + hex(ord(character))[2:]
...
>>> print(escape_literal('国'))
\u56fd

这种编码称为
unicode转义
,例如
u'国道'.encode('unicode-escape')
。但是,这将生成一个带有反斜杠、一个“u”以及数字和字母的字符串。这与源代码中的字符串文字
“\u72ec\u5230”
不同;该字符串文字包含两个以字符串文字unicode转义序列表示的汉字,而不是反斜杠“u”“等等……所以,有点不清楚你到底想要什么。@deceze“带反斜杠的字符串”是什么意思?它不必有2个字符,这就是我的例子。@deceze看起来像是
unicode转义码,毕竟,非常感谢!显示的代码仅适用于python3,而不适用于python2。@deceze我看到它出于某种原因输出了两次反斜杠:
print(u)国".encode('unicode-escape')
输出
b'\\u56fd'
。我猜最初的反斜杠后来被删除了。