在Python中显示西里尔字母

1 投票
1 回答
1477 浏览
提问于 2025-04-18 03:06

假设我有一个变量里面存的是俄文内容:

msg = '<some russian text here>'
print msg 

这个能给我正确的值,但是

print [msg]

这个给我的结果是:

['\xd0\x9f\xd0\xa4 "\xd0\x9a\xd0\xa2\xd0\x9f-\xd0\xa3\xd1\x80\xd0\xb0\xd0\xbb" (\xd0\x97\xd0\x90\xd0\x9e)']

我该怎么才能在列表中保留西里尔字母呢?

1 个回答

1

你不能直接做到这一点,但可以通过 pprint 非常接近。

这里有个示例代码,链接在这儿:https://stackoverflow.com/a/10883893/705086

这个示例代码只处理 unicode 类型,但可以很容易地调整为适应 OP 中的 utf-8 编码的字符串或字节。

理想情况下,pprint 应该保持一个原则,就是格式化或打印出来的 PDO 是一个有效的 Python 表达式。链接中的代码也可以被修改,以保持这个原则。

你可以对 pprint 模块进行一些调整,以保持这个原则:

import functools, pprint

def escape(s):
    lead = ""
    if isinstance(s, unicode):
        s = s.encode("utf-8")
        lead = "u"
    return "%s\"%s\"" % (lead, s.replace("\\", "\\\\").replace("\"", "\\\""))

def patched(f):
    if hasattr(f, "_already_patched"):
        return f

    @functools.wraps(f)
    def sub(object, *args, **kwargs):
        try:
            if isinstance(object, basestring):
                return escape(object), True, False
        except Exception:
            pass
        return f(object, *args, **kwargs)

    sub._already_patched = True
    return sub

pprint._safe_repr = patched(pprint._safe_repr)

pprint.pprint([u"\N{EURO SIGN}", u"\N{EURO SIGN}".encode("utf-8")])
[u"€", "€"]

撰写回答