在Python字符串中抑制u'前缀表示unicode
有没有办法在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
..但是别这么做,这样很糟糕。