【问题标题】:Json converts & in a String to \u0026Json 将字符串中的 & 转换为 \u0026
【发布时间】:2012-09-24 00:17:58
【问题描述】:

我正在尝试从 pdf 中提取文本并将其写入 json 文件。在提取 unicode 字符时,Json 将所有 & 转换为 \u0026。例如我的实际字符串是&#1588。 (代表Ô)。它可以正确打印到 .txt 文件、控制台等。但是当我尝试将此字符串打印到 Json 文件时,它会显示\u0026#1588;

我用的是Java,代码是

Gson gson = new Gson();
String json = gson.toJson(pdfDoc);

注意:pdfDoc 是一个对象,它包含输入 PDF 文档中字符的所有详细信息(位置、颜色、字体等)。我正在使用gson-2.2.1.jar

【问题讨论】:

    标签: java json string unicode gson


    【解决方案1】:

    这实际上是一种有效的(但不是必需的)编码。 任何字符可以使用 JSON 中的 unicode 转义进行编码,并且任何有效的 JSON 解析库必须能够解释这些转义。

    & 不是 需要 编码的字符的一部分(参见string at json.org 的定义),但是有一些 JSON 库在它们的编码。这通常不是问题,除非您没有真正使用符合标准的 JSON 解析器来处理生成的 JSON。

    GsonBuilder.disableHtmlEscaping() 将在您绝对需要时帮助您关闭该功能。

    【讨论】:

    • 谢谢。有效。我将代码更改为 Gson gson = new GsonBuilder().disableHtmlEscaping().create();
    • unsplash.com 是这些“激进”库之一。使用以下代码快速解码: extension String { func utf8DecodedString()-> String { let data = self.data(using: .utf8) let message = String(data: data!, encoding: .nonLossyASCII) ?? "" return message } func utf8EncodedString()-> String { let messageData = self.data(using: .nonLossyASCII) let text = String(data: messageData!, encoding: .utf8) ?? "" 返回文本 } }
    【解决方案2】:

    在 Swift 中使用以下代码从 unsplash.com JSON 文件中解码 \u0026:

    extension String {
        func utf8DecodedString()-> String {
            let data = self.data(using: .utf8)
            let message = String(data: data!, encoding: .nonLossyASCII) ?? ""
            return message
        }
        
        func utf8EncodedString()-> String {
            let messageData = self.data(using: .nonLossyASCII)
            let text = String(data: messageData!, encoding: .utf8) ?? ""
            return text
        }
    }
    
    let jsonOriginal = #"Let\u2019s not be na\357ve \u0026 dumb!"#
    
    print(jsonOriginal)
    print("----")
    
    let jsonDecoded = jsonOriginal.utf8DecodedString()
    print(jsonDecoded)
    
    let jsonEncoded = jsonDecoded.utf8EncodedString()
    print(jsonEncoded)
    

    奇怪的是,编码离开 & 并且不会重新编码为 \u0026??

    【讨论】:

      猜你喜欢
      • 2018-06-28
      • 2012-10-06
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多