[英]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.