Python 打印不带转义字符的unicode字符列表
如果您有一个字符串,如下所示,使用unicode字符,您可以打印它,并获得未缩放的版本:Python 打印不带转义字符的unicode字符列表,python,list,encoding,python-2.7,Python,List,Encoding,Python 2.7,如果您有一个字符串,如下所示,使用unicode字符,您可以打印它,并获得未缩放的版本: >>> s = "äåö" >>> s '\xc3\xa4\xc3\xa5\xc3\xb6' >>> print s äåö 但是如果我们有一个包含上面字符串的列表并将其打印出来: >>> s = ['äåö'] >>> s ['\xc3\xa4\xc3\xa5\xc3\xb6'] >>> prin
>>> s = "äåö"
>>> s
'\xc3\xa4\xc3\xa5\xc3\xb6'
>>> print s
äåö
但是如果我们有一个包含上面字符串的列表并将其打印出来:
>>> s = ['äåö']
>>> s
['\xc3\xa4\xc3\xa5\xc3\xb6']
>>> print s
['\xc3\xa4\xc3\xa5\xc3\xb6']
您仍然可以获得转义字符序列。您如何才能使列表的内容不被替换,这可能吗?像这样:
>>> print s
['äåö']
另外,如果字符串是unicode
类型,您如何执行与上面相同的操作
>>> s = u'åäö'
>>> s
u'\xe5\xe4\xf6'
>>> print s
åäö
>>> s = [u'åäö']
>>> s
[u'\xe5\xe4\xf6']
>>> print s
[u'\xe5\xe4\xf6']
这令人满意吗
>>> s = ['äåö', 'äå']
>>> print "\n".join(s)
äåö
äå
>>> print ", ".join(s)
äåö, äå
>>> s = [u'åäö']
>>> print ",".join(s)
åäö
在Python2.x中,默认值是您所经历的:
>>> s = ['äåö']
>>> s
['\xc3\xa4\xc3\xa5\xc3\xb6']
但是,在Python 3中,它会正确显示:
>>> s = ['äåö']
>>> s
['äåö']
打印字符串时,您将获得对象的
\uuuu str\uuu
方法的输出—在本例中是不带引号的字符串。列表的\uuuu str\uuuu
方法不同,它创建一个字符串,其中包含开头和结尾的[]
以及包含在列表中的每个对象的\uu repr\uuuu
方法生成的字符串。您所看到的是\uuuu str\uuuuuuuuuuuuuuuuu
和\uuuuuuu repr\uuuuuuuuu
之间的区别
您可以构建自己的字符串:
print '[' + ','.join("'" + str(x) + "'" for x in s) + ']'
此版本应适用于Python 2中的Unicode和字节字符串:
print u'[' + u','.join(u"'" + unicode(x) + u"'" for x in s) + u']'
另一个解决方案
s = ['äåö', 'äå']
encodedlist=', '.join(map(unicode, s))
print(u'[{}]'.format(encodedlist).encode('UTF-8'))
给予
[äåö,äå]可以使用此包装类:
#!/usr/bin/python
# -*- coding: utf-8 -*-
class ReprToStrString(str):
def __repr__(self):
return "'" + self.__str__() + "'"
class ReprToStr(object):
def __init__(self, printable):
if isinstance(printable, str):
self._printable = ReprToStrString(printable)
elif isinstance(printable, list):
self._printable = list([ReprToStr(item) for item in printable])
elif isinstance(printable, dict):
self._printable = dict(
[(ReprToStr(key), ReprToStr(value)) for (key, value) in printable.items()])
else:
self._printable = printable
def __repr__(self):
return self._printable.__repr__()
russian1 = ['Валенки', 'Матрёшка']
print russian1
# Output:
# ['\xd0\x92\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xba\xd0\xb8', '\xd0\x9c\xd0\xb0\xd1\x82\xd1\x80\xd1\x91\xd1\x88\xd0\xba\xd0\xb0']
print ReprToStr(russian1)
# Output:
# ['Валенки', 'Матрёшка']
russian2 = {'Валенки': 145, 'Матрёшка': 100500}
print russian2
# Output:
# {'\xd0\x92\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xba\xd0\xb8': 145, '\xd0\x9c\xd0\xb0\xd1\x82\xd1\x80\xd1\x91\xd1\x88\xd0\xba\xd0\xb0': 100500}
print ReprToStr(russian2)
# Output:
# {'Матрёшка': 100500, 'Валенки': 145}
对于
unicode
字符串是否有这样的解决方法?我已经更新了关于unicode字符串的问题。是否可以在Python 2.7中正确显示它?@int\u ua您可以创建一个递归函数来正确处理它。但这不是问题,这是迄今为止最好的答案。