25

PDFからテキストを抽出してjsonファイルに書き込もうとしています。Unicode文字を抽出している間、Jsonはすべての&を&に変換します。たとえば、私の実際の文字列は&#1588です。(これはشを表します)。.txtファイル、コンソールなどに正しく出力されます。しかし、この文字列をJsonファイルに出力しようとすると、が表示されます\u0026#1588;

私はJavaを使用していますが、コードは

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

注:pdfDocはオブジェクトであり、入力PDFドキュメント内の文字のすべての詳細(位置、色、フォントなど)が含まれています。私はを使用してgson-2.2.1.jarいます。

4

2 に答える 2

43

これは実際には有効な(ただし必須ではない)エンコーディングです。任意の文字JSONのUnicodeエスケープを使用してエンコードでき、有効なJSON解析ライブラリはそれらのエスケープを解釈できる必要があります。

&はエンコードが必要な文字の一部ではありませんが( string json.orgの定義を参照)、エンコードが非常に「積極的」なJSONライブラリがいくつかあります。結果のJSONを準拠するJSONパーサーで実際に処理しない限り、これは通常問題にはなりません。

GsonBuilder.disableHtmlEscaping()は、どうしても必要な場合にその機能をオフにするのに役立ちます。

于 2012-10-03T05:29:46.037 に答える
0

次のコードを使用して、Swiftのunsplash.comJSONファイルから&をデコードします。

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)

不思議なことに、エンコーディングは&を残し、&に再コーディングしませんか?

于 2022-01-04T22:26:04.600 に答える