簡體   English   中英

如何確保 JSON 字符串是 UTF-8 編碼在 Java

[英]How to ensure that the JSON string is UTF-8 encoded in Java

我正在處理舊版 web 服務客戶端代碼,其中 JSON 數據正在發送到 web 服務。 最近發現對於JSON body中的一些請求,由於Z0ECD11C1D7A287401D148A23BBD7A2F8 Body中的無效字符(非UTF8),服務給HTTP 400響應。

以下是導致問題的數據的一個示例。

String value = "zu3z5eq tô‰U\f‹Á‹€z";

我正在使用org.json.JSONObject.toString()方法生成 JSON 字符串。 請告訴我如何確保 JSON 字符串是 UTF-8 編碼的?

我已經嘗試了一些在線解決方案,例如轉換為字節數組然后返回,使用 java 字符集方法等,但它們不起作用。 它們要么像中文/日文字符一樣轉換有效值,要么根本不起作用。

您能否就此提供一些意見?

您需要在創建時設置OutputStreamWriter的字符編碼:

 httpConn.connect();
 wr = new OutputStreamWriter(httpConn.getOutputStream(), StandardCharsets.UTF_8); 
 wr.write(jsonObject.toString());
 wr.flush();

否則,它默認為“平台默認編碼”,這是一種歷史上已用於您正在運行的任何系統上的文本文件的編碼。

使用 Base64 編碼將值轉換為 Byte[]。

  String value = "zu3z5eq tô‰U\f‹Á‹€z";

    // WHILE  SENDING  ENCODE THE VALUE
    byte[] encodedBytes = Base64.getEncoder().encode(value.getBytes("UTF-8"));
    String encodedValue = new String(encodedBytes, "UTF-8");

    // TRANSPORT....

    // ON RECEIVING END DECODE THE  VALUE
    byte[] decodedBytes = Base64.getDecoder().decode(encodedValue.getBytes("UTF-8"));
    System.out.println( new  String(decodedBytes, "UTF-8"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM