gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:47:02 25 4
gpt4 key购买 nike

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

>>> t = [('亀',), ('犬',)]

打印出来,我得到:

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

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

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

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

但是我在将字节码恢复为人类可读的形式时遇到了很多麻烦。

最佳答案

but what I want to see printed out is, surprise:

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

您想在什么地方打印出来?因为如果是控制台,则完全不能保证您的控制台可以显示这些字符。这就是为什么 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() 通常不会进入应用程序的公共(public)用户界面;它实际上仅供编码人员使用。

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

  • 没有 ‘u’ 前缀的普通 '' 字符串现在是 Unicode 字符串
  • repr() 逐字显示大多数 Unicode 字符
  • Windows 控制台中的 Unicode 得到更好的支持(如果您的环境不是 UTF-8,您仍然可以在 Unix 上获得 UnicodeError)

Python 3.0 有点新,图书馆的支持不是很好,但它可能更适合您的需求。

关于python - 如何以原始语言(不是 u'foo' 形式)打印 unicode 字符串的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/621321/

25 4 0