代码之家  ›  专栏  ›  技术社区  ›  Ivan Bilan

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

  •  0
  • Ivan Bilan  · 技术社区  · 6 年前

    我有以下中文字符串,它们以以下形式保存为“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。我们的目标是获取我拥有的其他汉字,并以相同的编码方式保存它们。如果我有“é”,我需要以与原始文件相同的方式保存它们 chinese_list

    我尝试将其编码为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'
    

    感谢您的帮助!

    编辑:它不必有2个汉字。

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

    print(u"国".encode('unicode-escape'))
    >>> \u56fd
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   MisterMiyagi    6 年前

    这个 \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