如何转换字符串中任何特殊字符的编码值并将其插入Java中的JSON对象中?

问题描述 投票:0回答:2

我正在尝试将货币符号(例如欧元)插入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"}
java json special-characters symbols
2个回答
0
投票

我不确定您的确切要求,但能解决上述情况。

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 );

0
投票

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”}


0
投票

尝试这样:

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
© www.soinside.com 2019 - 2024. All rights reserved.