3

我正在使用 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$

编辑2:

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

4

1 回答 1

3

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

于 2012-09-06T18:09:06.903 回答