Python unicode转义:仅使用\unnn代码,不使用\xNN

Python unicode转义:仅使用\unnn代码,不使用\xNN,python,python-3.x,unicode,escaping,Python,Python 3.x,Unicode,Escaping,使用Python,我需要将Unicode字符串编码为可打印ASCII字符和Unicode转义序列的组合。这方面有str.encode('unicode-escape')。问题是,此转换为短Unicode序列输出十六进制转义序列(\xAB),为长Unicode序列输出Unicode序列(\uABCD): >>> test = 'XüX → YœYö' >>> test.encode('unicode-escape') b'X\\xfcX \\u2192 Y\\u

使用Python,我需要将Unicode字符串编码为可打印ASCII字符和Unicode转义序列的组合。这方面有
str.encode('unicode-escape')
。问题是,此转换为短Unicode序列输出十六进制转义序列(
\xAB
),为长Unicode序列输出Unicode序列(
\uABCD
):

>>> test = 'XüX → YœYö'
>>> test.encode('unicode-escape')
b'X\\xfcX \\u2192 Y\\u0153Y\\xf6
#    NOPE   OKAY     OKAY    NOPE
您知道一些Python内部代码只输出Unicode转义序列吗


当然,我可以手动检查字符是否可以ASCII打印,或者自己进行转换,但这感觉真的很粗糙:

>>> coded = ''.join(
        (c if c.encode('ascii', 'ignore') != b''
           else '\\u{:04x}'.format(ord(c)))
        for c in test)
>>> coded
'X\\u00fcX \\u2192 Y\\u0153Y\\u00f6'
#   OKAY     OKAY     OKAY    OKAY
>>> ast.literal_eval("'{}'".format(coded))
'XüX → YœYö'
使用JSON格式:

#!/usr/bin/env python3
import json

print(json.dumps(u'XüX → YœYö'))
# -> "X\u00fcX \u2192 Y\u0153Y\u00f6"

Python2还是Python3?我给出的代码示例应该给您一个提示:这是Python3代码。为了回答你的问题,我对两个版本的解决方案都感兴趣。说到黑客!但这应该行得通,谢谢。AFAIK any JSON字符串是有效的Python字符串。不过,如果能够对这个断言进行事实检查,那就太好了。@Zopieux:在Python中读回JSON文本的正确方法:
s=JSON.loads(JSON\u text)
@J.F.Sebastian我知道,谢谢。实际上,我不必在Python中读回它们,这将在代码生成中使用。任何JSON字符串文字都是有效的Python字符串文字,但不一定代表完全相同的字符序列,这取决于代理项的处理方式。。。