python - 在Python中显示西里尔字母

标签 python encoding cyrillic

假设我的变量中有俄语内容:

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)']

如何在列表中保留西里尔字母符号?

最佳答案

您不能直接做到这一点,但您可以使用 pprint 非常接近。

https://stackoverflow.com/a/10883893/705086中有示例代码

它仅涵盖 unicode 类型,但可以轻松适应 OP 中的 utf-8 编码的 str/bytes。

理想情况下,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"€", "€"]

关于python - 在Python中显示西里尔字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23131924/

相关文章:

c# - 以UTF-16编码格式反序列化xml文件时出现XmlException

hibernate - JPA (Hibernate) 西里尔字母

python - firefox webdriver for selenium on debian issue

python - 连接系列中列表的元素

python - 使用 Python 对 C 代码进行单元测试的最简单方法

javascript - 使用 d3 从 CSV/JSON 读取西里尔文本

sql-server - 单声道的 SqlParameter 中的西里尔值插入错误

python - 当函数返回多个值时,简单地使用一个值或几个值的Pythonic方法是什么?

javascript - 如何在 JavaScript 中生成 Shift_JIS(SJIS) 百分比编码字符串

python - [Python]编码与执行文件