在Python字符串中抑制u'前缀表示unicode

49 投票
11 回答
79623 浏览
提问于 2025-04-15 11:09

有没有办法在Python中全局关闭unicode字符串的标识?我在一个应用程序中只使用unicode,并且做了很多交互式的操作。在我的调试输出中,u'这个前缀总是出现,感觉很烦人,也没必要。能不能把它关掉?

11 个回答

8
from __future__ import unicode_literals

这个功能从Python 2.6开始就有了(发布于2008年10月1日),在Python 3中是默认的。

它允许你在源代码中省略u''这个前缀,虽然这样做并不会改变repr(unicode_string)的结果,这可能会让人误解。

你可以在Python的交互式环境中重写sys.displayhook(),这样就可以按照你喜欢的方式显示对象。你也可以为自己定义的对象重写__repr__

33

我遇到过一个情况,我需要去掉字母“u”前缀,因为我在设置一些用Python写的JavaScript代码,作为HTML模板的一部分。简单的输出结果中,字典的键会保留这个“u”前缀,比如:

var turns = [{u'armies':2...];

这会导致JavaScript出错。

为了得到JavaScript需要的输出格式,我使用了Python的json模块来帮我编码字符串:

turns = json.dumps(turns)

在我的这个特定情况下,这个方法有效,而且因为所有的键都是ASCII字符,所以不需要担心编码问题。你也可以试试这个方法来调试你的输出。

39

你可以使用Python 3.0。默认的字符串类型是unicode,所以不再需要加u''这个前缀了。

简单来说,不行。你不能关闭这个功能。

这个u是来自unicode.__repr__这个方法,它用于在REPL(交互式命令行)中显示内容:

>>> print repr(unicode('a'))
u'a'
>>> unicode('a')
u'a'

如果我没记错的话,你不能在不重新编译Python的情况下覆盖这个。

解决这个问题最简单的方法就是直接打印字符串。

>>> print unicode('a')
a

如果你使用unicode()这个内置函数来构建所有字符串,你可以这样做:

>>> class unicode(unicode):
...     def __repr__(self):
...             return __builtins__.unicode.__repr__(self).lstrip("u")
... 
>>> unicode('a')
a

..但是别这么做,这样很糟糕。

撰写回答