Python中的Unicode转换

2024-05-23 13:29:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把dict中的字符串转换成中文,但不知道如何转换。一些提示对我会有帮助的。在

My python version is 2.7.12 on win32

首先,我有变量s

s = '\u7279\u6717\u666e\u5973\u513f\u4f0a\u4e07\u5361\u5230\u4e2d\u56fd\u5927\u4f7f\u9986\u8d3a\u65b0\u5e74'

当我使用这两种方法时,它是有效的:Bo

^{pr2}$

输出:中国

^{3}$

输出:中国

但是当我有一个名为data的dict,并打印如下。在

data = {
'title' : s,
}
print data

输出显示为

{'title': '\u7279\u6717\u666e\u5973\u513f\u4f0a\u4e07\u5361\u5230\u4e2d\u56fd\u5927\u4f7f\u9986\u8d3a\u65b0\u5e74'}


Tags: datadictu4e2du4f7fu5973u4e07u56fdu5927
3条回答

可以使用pprint。这是quora的答案 回答你的问题。在空闲状态下运行它以正确查看未编码字符串

https://www.quora.com/How-do-you-print-a-python-unicode-data-structure

import pprint
_escape = dict((q, dict((c, unicode(repr(chr(c)))[1:-1])
                        for c in range(32) + [ord('\\')] +
                        range(128, 161),
                        **{ord(q): u'\\' + q}))
               for q in ["'", '"'])
class MyPrettyPrinter(pprint.PrettyPrinter):
    def format(self, object, context, maxlevels, level):
        if type(object) is unicode:
            q = "'" if "'" not in object or '"' in object \
                else '"'
            return ("u" + q + object.translate(_escape[q]) +
                    q, True, False)
        return pprint.PrettyPrinter.format(
            self, object, context, maxlevels, level)


pp = MyPrettyPrinter()
s = u'\u7279\u6717\u666e\u5973\u513f\u4f0a\u4e07\u5361\u5230\u4e2d\u56fd\u5927\u4f7f\u9986\u8d3a\u65b0\u5e74'
print(s)
data = {
u'title' : s 
}
pp.pprint(data)

您可以使用unicode escape将字符串解码为中文

在Python 3.x中

s = b'\u7279\u6717\u666e\u5973\u513f\u4f0a\u4e07\u5361\u5230\u4e2d\u56fd\u5927\u4f7f\u9986\u8d3a\u65b0\u5e74'

注意b字节的文字

print(s.decode('unicode-escape'))
特朗普女儿伊万卡到中国大使馆贺新年

在Python 2.x中

^{pr2}$

编辑时间: 在您的例子中,由于您使用的是python 2.7:

s = u'\u7279\u6717\u666e\u5973\u513f\u4f0a\u4e07\u5361\u5230\u4e2d\u56fd\u5927\u4f7f\u9986\u8d3a\u65b0\u5e74'

请注意使用了“u”-unicode文本。在

现在,如果您想打印它,只需输入print s,print充当编码器

如果你想在字典中使用它,只需使用s,因为它最终将被存储为unicode字符串,当你想看到结果时,只需打印该值。在

第一点:print data打印您的datadict的内部表示形式(repr(data)的结果),因此您可以得到字符串的内部表示形式。您会注意到print repr(s)vsprint s的相同行为。在

另外,如果您想使用unicode字符串,您必须明确地告诉Python它是unicode字符串,方法是在字符串前面加上一个“u”,即:

s = u'\u7279\u6717\u666e\u5973\u513f\u4f0a\u4e07\u5361\u5230\u4e2d\u56fd\u5927\u4f7f\u9986\u8d3a\u65b0\u5e74'
print s

这不会使您的print data按预期工作,但至少您可以按原样或通过将其编码为所需的编码正确地打印unicode字符串。在

注意:如果您的Python版本足够新,您还可以从from__future__ import unicode_literals开始脚本,这将告诉Python将此模块中的每个和任何文本字符串都视为unicode字符串。在

NB2:如果您从外部资源获得s字符串,那么在方式上有问题-因为您得到的是一个包含unicode点的字节字符串-,所以首先解决这个问题(您应该获得一个正确编码的字节字符串-以已知的编码-或者最好是一个正确的unicode字符串)。在

相关问题 更多 >