Python:在编辑器中正确显示\\u00bd
我想做以下几件事:
1) 把我的类进行序列化,也就是把它转换成一种可以保存的格式。
2) 手动编辑这个序列化后的文件,删除一些我觉得不必要的对象。
我现在在用Python和simplejson。你知道的,simplejson会把所有字符转换成unicode格式。所以,当我用simplejson把一个特定的对象转储时,unicode字符会变成像"\u00bd"这样的形式,表示“好”。
我想手动编辑这个simplejson文件,方便一些。这里有没有人知道怎么解决这个问题?
我对这个序列化格式的要求是:
1) 使用起来简单(只需转储和加载,搞定)。
2) 让我可以轻松地手动编辑,不用太麻烦。
3) 能够显示中文字符。
我用的是vim。有没有人知道怎么在vim中把"\u00bd"转换成“好”?
2 个回答
我对simplejson或者问题中的序列化部分不太了解,但你问到如何在Vim中把"\u00bd"转换成好。这里有一些关于在Vim中处理unicode的技巧:
首先,你需要在Vim中设置正确的编码,具体可以参考:
:help 'encoding' :help 'fileencoding'
通过数字输入unicode字符很简单,只需进入插入模式,按下Ctrl-V,然后输入
u
后面跟上四位数字(或者U
后面跟上八位数字)。具体可以看::help i_CTRL-V_digit
另外,要确保在Vim中字符能正确显示,你需要使用包含该字符的等宽字体。在
Envy Code R
中,它显示为一个宽空格,而在Lucida Console、Consolas和Courier New中则显示为各种方框。如果你想把
\uXXXX
替换成unicode字符XXXX
(其中X是任意十六进制数字),在正常模式下输入以下内容(<ENTER>
表示按下ENTER键,不要字面输入)::%s/\\u\x\{4\}/\=eval('"' . submatch(0) . '"')/g<ENTER>
不过要注意,u00bd似乎是unicode字符½(也就是1/2,如果这个字符在你的屏幕上显示不正确),而不是你提到的好字符(我想好是u597D)。可以参考这个unicode表。启动Vim并输入这些字符(<Ctrl-V>
是通过按住CTRL
,按下V
,然后先放开V
再放开CTRL
来实现的):
i<Ctrl-V>u00bd
如果你的字体支持这个字符,你应该能看到一个像1/2的小字符。
如果你想让 json
或 simplejson
输出的是 Unicode 字符,而不是带有 Unicode 转义的字符串,那么你需要在调用 dump()
或 dumps()
时加上 ensure_ascii=False
。然后,你可以在保存之前进行编码,或者使用来自 codecs
的类似文件的对象。