3

CL-JSON を使用してオブジェクトをエンコードしています。エンコードされた文字列を ASCII 形式で出力し、非 ASCII 文字は「\uxxxx」形式の一連の ASCII 文字として書き出されます。その結果、出力ファイル ストリームを外部フォーマット :utf-8 で開いても、ファイルには ASCII 文字しか含まれません。たとえば、メモ帳 ++ で表示しようとすると、すべてのデータが ASCII (「\uXXXX」シーケンスであっても) になるため、Unicode に変換できません。ファイルを自動的に Unicode に変換し、それらのエスケープ シーケンスを認識するエディターがあるかどうか、または出力文字を Unicode で保持するように CL-JSON に指示する方法があるかどうかを知りたいです。何か案は?

編集:ここにいくつかの詳細情報があります:

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 形式でエスケープせずに文字を出力しますが、残念ながら必要な機能がないため、オプションではありません。

4

1 に答える 1

3

これが一時的な解決策であることはわかっていますが、適切な関数を再定義して、ASCII 以外の範囲をユニコードエスケープしないように CL-JSON ソースを変更しました。関数には名前が付けられ、ソース内のwrite-json-charsファイルencoder.lispに存在します。

于 2012-09-06T18:09:06.903 に答える