首页 > 解决方案 > 如何正确打印出带有 unicode 转义字符的字符串

问题描述

例如,我正在从包含嵌入式 unicode 转义序列的文件中读取字符串 \u00e9。当我使用 打印文字字符串print()时,编码通过 print 转换为正确的字符,但是如果我从 stdin 获取字符串并将它们打印出来, print 不会将转义序列转换为 unicode 字符。

例如,当我使用:

print ("Le Condamn\u00e9 \u00e0 mort") 

但是, python 正确打印Le Condamné à mort ,如果我从 stdin 得到相同的字符串,我得到:Le Condamn\u00e9 \u00e0 mort

有谁知道我如何让 python 将转义序列转换为正确的 unicode 字符?print另外,当你给它一个字符串文字而不是一个字符串变量时,为什么会有不同的行为呢?

标签: pythonstringtranslation

解决方案


\u00e0被存储为 python 的 Unicode 数字,因此它被打印为“à” 。当您从另一个文件中获取它时,它完全是字符串形式,这意味着它随后被存储为'\\u00e0'每个字符都是字符串的地方。解决此问题的方法是确定'\\u00e0'列表中的位置,然后将其替换为'\u00e0'

这是一些将'\\u00e0'字符串中的转换为它应该是的字符的代码。

def special_char_fix(string):
    string = list(string)
    for pl, char in enumerate(string):
        if char == '\\':
            val = ''.join([string[pl + k + 2] for k in range(4)])
            for k in range(5):
                string.pop(pl)
            string[pl] = str(chr(int(val, 16)))
    return ''.join(string)

推荐阅读