Json 将 & in a String 转换为 \u0026

2022-09-01 17:12:35

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

我正在使用Java,代码是

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

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


答案 1

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

&不是需要编码的字符的一部分(请参阅 at json.org 的定义),但有一些 JSON 库在编码方面非常“激进”。这通常不是问题,除非您没有使用符合要求的JSON解析器真正处理生成的JSON。string

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


答案 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)

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