Python:在编辑器中正确显示\\u00bd

1 投票
2 回答
754 浏览
提问于 2025-04-15 20:09

我想做以下几件事:

1) 把我的类进行序列化,也就是把它转换成一种可以保存的格式。

2) 手动编辑这个序列化后的文件,删除一些我觉得不必要的对象。

我现在在用Python和simplejson。你知道的,simplejson会把所有字符转换成unicode格式。所以,当我用simplejson把一个特定的对象转储时,unicode字符会变成像"\u00bd"这样的形式,表示“好”。

我想手动编辑这个simplejson文件,方便一些。这里有没有人知道怎么解决这个问题?

我对这个序列化格式的要求是:

1) 使用起来简单(只需转储和加载,搞定)。

2) 让我可以轻松地手动编辑,不用太麻烦。

3) 能够显示中文字符。

我用的是vim。有没有人知道怎么在vim中把"\u00bd"转换成“好”?

2 个回答

1

我对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的小字符。

0

如果你想让 jsonsimplejson 输出的是 Unicode 字符,而不是带有 Unicode 转义的字符串,那么你需要在调用 dump()dumps() 时加上 ensure_ascii=False。然后,你可以在保存之前进行编码,或者使用来自 codecs 的类似文件的对象。

撰写回答