打印unicode字符串的转义表示形式

时间:2017-08-02 21:36:41

标签: python unicode escaping

在stackoverflow上已经提出过类似的问题,但是没有一个答案可以同时处理带有重音字符(例如àéï)和特殊字符(例如制表符或回车符)的字符串。

采用以下2.7 python函数:

def print_escaped(string):
    print 1, type(string)
    print 2, string
    print 3, repr(string)
    print 4, string.encode('string_escape')
    print 5, string.decode('utf-8')
    print 6, string.decode('utf-8').encode('unicode_escape')
    print 7, repr(string.decode('utf-8'))

使用输入abécd\r\t\n调用时,将打印:

1 <type 'str'>
2 abécd

3 'ab\xc3\xa9cd\r\t\n'
4 ab\xc3\xa9cd\r\t\n
5 abécd

6 ab\xe9cd\r\t\n
7 u'ab\xe9cd\r\t\n'

如何在屏幕上打印此字符串,只需abécd\r\t\n?我想逃避所有控制序列,但保持所有“正常”可读代码点不受影响。

1 个答案:

答案 0 :(得分:1)

mappings = {"\r":"\\r","\n","\\n","\t","\\t",...}
print( "".join(mappings.get(ltr,ltr) for ltr in my_string))

escaped = "\r\n\t..."
print("".join(repr(ltr) if ltr in escaped else ltr for ltr in my_string))

print(re.sub("(\s)",lambda m:repr(m.group(0)),my_string)