CL-JSON通过以ASCII格式输出Unicode转义字符串来对Unicode字符进行编码。我怎么能覆盖这个呢?

时间:2012-09-06 16:46:03

标签: json unicode common-lisp

我正在使用CL-JSON来编码对象。它以ASCII格式吐出编码的字符串,非ASCII字符以“\ uxxxx”形式写成ASCII字符序列。结果是即使我用外部格式打开输出文件流:utf-8,该文件只包含ASCII字符。当我尝试使用例如notepad ++查看它时,我无法将其转换为Unicode,因为现在所有数据都只是ASCII(甚至是“\ uXXXX”序列)。我想知道是否有一个编辑器会自动将文件转换为Unicode并识别这些转义序列,或者是否有办法告诉CL-JSON将输出字符保存在Unicode中。有什么想法吗?

编辑:这里有更多信息:

CL-USER>(with-open-file (out "dump.json" 
                          :direction :output 
                          :if-does-not-exist :create 
                          :if-exists :overwrite 
                          :external-format :utf-8)
             (json:encode-json '("abcd" "αβγδ") out) 
             (format out "~%"))

CL-USER>(quit)

bash$ file dump.json
dump.json: ASCII text
bash$ cat dump.json
["abcd","\u03B1\u03B2\u03B3\u03B4"]
bash$ uname -a
Linux suse-server 3.0.38-0.5-default #1 SMP Fri Aug 3 09:02:17 UTC 2012 (358029e) x86_64 x86_64 x86_64 GNU/Linux
bash$ sbcl --version
SBCL 1.0.50
bash$

EDIT2:

YASON做我需要的,输出字符而不用\ uXXXX格式转义它们,但不幸的是它缺少我需要的功能,所以它不是一个选项。

1 个答案:

答案 0 :(得分:3)

我知道这是一个临时解决方案,但我通过重新定义适当的函数而不是ASCII之外的unicode-escape范围来更改CL-JSON源。该函数名为write-json-chars,它位于源文件encoder.lisp中。