在Python中显示西里尔字母
假设我有一个变量里面存的是俄文内容:
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"€", "€"]