Hen*_*yKo 3 python unicode emoji
我正在尝试将转义 Unicode 转换为表情符号。
例子:
>>> emoji = ""
>>> emoji_text = "\\ud83d\\ude00"
>>> print(emoji)
>>> print(emoji_text)
\ud83d\ude00
Run Code Online (Sandbox Code Playgroud)
我想打印而不是“\ud83d\ude00”
我发现了一个简单的技巧,有效但不实用:
>>> import json
>>> json.loads('"\\ud83d\\ude00"')
''
Run Code Online (Sandbox Code Playgroud)
ensure_ascii=True除了字符串中需要双引号之外,您的示例与 JSON 的字符串输出很接近。它包含 U+FFFF 以上 Unicode 字符的 Unicode 转义高/低代理项。
请注意,unicode-escape编解码器不能单独用于转换。它将创建一个带有代理项的 Unicode 字符串,这是非法的。您将无法打印或编码字符串以进行序列化。
>>> s = "\\\\ud83d\\\\ude00"\n>>> s = s.encode(\'ascii\').decode(\'unicode-escape\')\n>>> s\n\'\\ud83d\\ude00\'\n>>> print(s) # UnicodeEncodeError: surrogates not allowed\nRun Code Online (Sandbox Code Playgroud)\nsurrogatepass将错误处理程序与编解码器结合使用utf-16,您可以撤消代理并正确解码字符串。请注意,这也将解码非代理转义码:
>>> s = "\\\\ud83d\\\\ude00"\n>>> s = s.encode(\'ascii\').decode(\'unicode-escape\')\n>>> s\n\'\\ud83d\\ude00\'\n>>> print(s) # UnicodeEncodeError: surrogates not allowed\nRun Code Online (Sandbox Code Playgroud)\n以下代码将用 Unicode 代码点替换 Unicode 代理项。如果您有其他非代理 Unicode 转义,它也会用它们的代码点替换它们。
\nimport re\n\ndef process(m):\n \'\'\'process(m) -> Unicode code point\n\n m is a regular expression match object that has groups below:\n 1: high Unicode surrogate 4-digit hex code d800-dbff\n 2: low Unicode surrogate 4-digit hex code dc00-dfff\n 3: None\n OR\n 1: None\n 2: None\n 3: Unicode 4-digit hex code 0000-d700,e000-ffff\n \'\'\'\n if m.group(3) is None:\n # Construct code point from UTF-16 surrogates\n hi = int(m.group(1),16) & 0x3FF\n lo = int(m.group(2),16) & 0x3FF\n cp = 0x10000 | hi << 10 | lo\n else:\n cp = int(m.group(3),16)\n return chr(cp)\n\ns = "Hello\\\\u9a6c\\\\u514b\\\\ud83d\\\\ude00"\ns = re.sub(r\'\\\\u(d[89ab][0-9a-f]{2})\\\\u(d[cdef][0-9a-f]{2})|\\\\u([0-9a-f]{4})\',process,s)\nprint(s)\nRun Code Online (Sandbox Code Playgroud)\n输出:
\nHello\xe9\xa9\xac\xe5\x85\x8b\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4685 次 |
| 最近记录: |