当前位置:  开发笔记 > 编程语言 > 正文

如何以原始语言打印unicode字符串的元组(不是u'foo'形式)

如何解决《如何以原始语言打印unicode字符串的元组(不是u'foo'形式)》经验,为你挑选了1个好方法。

我有一个unicode对象元组列表:

>>> t = [('?',), ('?',)]

打印出来,我得到:

>>> print t
[('\xe4\xba\x80',), ('\xe7\x8a\xac',)]

我想这是这些字符串的utf-8字节码表示的列表?

但我想看到的是打印出来的,惊喜:

[('?',), ('?',)]

但是我在将字节码重新变成人类可读的形式方面遇到了过多的麻烦.



1> bobince..:

但我想看到的是打印出来的,惊喜:

[('亀',),('犬',)]

你想看到它打印出来的是什么?因为如果它是控制台,它根本不能保证您的控制台可以显示这些字符.这就是为什么Python的'repr()'对象表示用于\ -escapes的安全选项,你将始终能够在屏幕上看到并轻松输入.

作为先决条件,您应该使用Unicode字符串(u'').而且,正如Matthew所提到的,如果你想能够直接在源代码中编写u'亀',你需要确保Python可以读取文件的编码.对于偶尔使用非ASCII字符,最好坚持使用转义版本u'\ u4e80',但是当你想要阅读很多东亚文本时,"#coding = utf-8"是绝对是要走的路.

print'[%s]'%','.join([','.join('(%s,)'%','.join(ti)for ti in t)])

这将打印用引号打开的字符.你真的想要:

def reprunicode(u):
    return repr(u).decode('raw_unicode_escape')

print u'[%s]' % u', '.join([u'(%s,)' % reprunicode(ti[0]) for ti in t])

这可行,但如果控制台不支持Unicode(这在Windows上特别麻烦),你会得到一个很大的旧UnicodeError.

在任何情况下,这很少重要,因为您在这里看到的对象的repr()通常不会进入应用程序的公共用户界面; 它只适用于编码器.

但是,您会很高兴知道Python 3.0的行为完全符合您的要求:

没有'u'前缀的普通字符串现在是Unicode字符串

repr()逐字显示大多数Unicode字符

更好地支持Windows控制台中的Unicode(如果您的环境不是UTF-8,您仍然可以在Unix上获得UnicodeError)

Python 3.0有点新,而且库不太受支持,但它可能更适合您的需求.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有