当前位置: 首页 > 知识库问答 >
问题:

CL-JSON通过以ASCII格式输出Unicode转义字符串来编码Unicode字符。我如何覆盖它?

周枫涟
2023-03-14

我正在使用 CL-JSON 对对象进行编码。它以 ASCII 格式吐出编码字符串,非 ASCII 字符被写为“\uxxxx”形式的 ASCII 字符序列。结果是即使我使用外部格式打开输出文件流:utf-8,该文件也只包含 ASCII 字符。当我尝试使用例如记事本查看它时,我无法将其转换为 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格式输出字符而不转义它们,但不幸的是,它缺乏我需要的功能,所以它不是一个选项。

共有1个答案

佴德曜
2023-03-14

我知道这是一个临时解决方案,但我通过重新定义适当的函数来更改了CL-JSON源代码,而不是将转义范围统一到ASCII之外。该函数名为write-json-chars,它位于file编码器中。源代码中的lisp

 类似资料:
  • 问题内容: 我需要将unicode字符串转换为具有以unicode编码的非ascii字符的字符串。例如,字符串“汉字Max”应显示为“ \ u6F22 \ u5B57 Max”。 我尝试过的 的不同组合 新的String(sourceString.getBytes(encoding1),encoding2) Apache StringEscapeUtils也会转义ascii字符,例如双引号 Str

  • 问题内容: 在解析包含unicode转义序列的json字符串时,存在一个长期存在的错误。似乎需要修复该错误,这种错误可能很快就不会发生,因此我正在寻找一种在R中创建解决方法的方法,该方法在将序列提供给json解析器之前先取消序列化。 一些上下文:json数据始终是unicode,默认情况下使用,因此通常不需要转义。但是出于历史原因,json确实支持转义的unicode。因此json数据 和 是等效

  • 问题内容: 在下面查看我的代码。我有一个包含Unicode字符代码的JSON字符串。我将其转换为Java对象,然后将其转换回JSON字符串。但是,您可以看到输入和输出JSON字符串不匹配。是否可以使用Gson将我的对象转换为原始JSON字符串?我想和一样。 问题答案: 不幸的是,Gson似乎不支持它。所有JSON输入/输出分别集中在Gson(从2.8.0开始)和。可以使用其私有方法读取Unicod

  • 我有一个看起来像这样的字符串,由普通字符和中间的一个转义Unicode字符组成: < code>reb\u016bke 我想让Python将整个字符串转换成普通的Unicode版本,应该是< code > reb ske 。我试过用< code>str.encode(),但是好像没怎么用,显然decode已经不存在了?我真的卡住了! 编辑:repr的输出是< code>reb\\\u016bke

  • 问题内容: 当我尝试使用“ unicode(head.contents [3])”获取标签的内容时,我得到类似于以下的输出:“ Christensen Sk \ xf6ld”。我希望转义序列作为字符串返回。如何在python中做? 问题答案: 假设Python将名称视为普通字符串,则首先必须将其解码为unicode: 实现此目的的另一种方法: 注意字符串前面的“ u”,表示它是未编码的。如果进行打

  • 问题内容: 例如,如果我有一个 unicode 字符串,则可以将其编码为 ASCII 字符串,如下所示: 但是,我有例如以下 ASCII 字符串: …我想将其转换为与上述第一个示例相同的 ASCII 字符串: 问题答案: 我花了一些时间才弄清楚这一点,但此页面的最佳答案是: 还有一个“ raw-unicode-escape”编解码器,用于处理另一种指定Unicode字符串的方法-有关更多详细信息,