我正在尝试将货币符号(例如欧元)插入Java中的JSON对象中。我有欧元的编码字符串(\ u20AC。我们可能还有其他各种符号,\ t和其他符号)。当我尝试使用普通的字符串变量时,它会自动转换为欧元符号和制表符空间,但是当我将其插入JSON对象时,它不会转换。我尝试使用java.net.URLDecoder.decode()方法,但它也不起作用。
String s1 = "pqr\u20ACab\tcd";
JSONObject temp = new JSONObject();
temp.put("field", java.net.URLDecoder.decode(s1));
System.out.println(s1);
System.out.println(temp);
下面是我得到的输出
pqr€ab cd
{"field":"pqr\u20ACab\tcd"}
我不确定您的确切要求,但能解决上述情况。
ByteArrayOutputStream out = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8");
temp.write(writer);
writer.flush();
String jsonString = new String(out.toByteArray(),"utf-8");
JSONObject newJSON = new JSONObject(jsonString);
String newJsonString = newJSON.getString("field");
System.out.println(newJsonString );
com.google.gson.JsonParser取消转义欧元符号:
String s1 = "pqr\u20ACab\tcd";
JSONObject temp = new JSONObject();
temp.put("field", s1);
System.out.println(JsonParser.parseString(String.valueOf(temp)));
此打印{“ field”:“ pqr€ab \ tcd”}
尝试这样:
private String pack(@NonNull String s){
char[] c = s.toCharArray();
StringBuilder pack = new StringBuilder();
for (char value : c) {
pack.append(String.format("%04X", (int) value));
}
return pack.toString();
}
private String unpack(@NonNull String s){
StringBuilder pack = new StringBuilder();
for (int i =0; i<s.length() ; i+= 4) {
String part = s.substring(i, i+4);
pack.append(String.format("%c", Integer.parseInt(part, 16)));
}
return pack.toString();
}
String s = "pqr\u20ACab\tcd";
Log.i(TAG, "original: " + s); // pqr€ab cd
String packed = pack(s);
Log.i(TAG, "pack: " + packed); // 0070 0071 0072 20AC 0061 0062 0009 0063 0064
String unpacked = unpack(packed);
Log.i(TAG, "unpack: " + unpacked); // pqr€ab cd