日期:2014-05-19  浏览次数:20939 次

json-lib转义问题。自己方法把中文转换成十六进制\uXXXX的,输出后自动变成\\了
怎么解决这个问题?或者提供一个更好的JSON库,谢谢。
------最佳解决方案--------------------
json-lib 把\转换为\\是正确的

输出后的结果是js消费 所以字符串中的 \ 必须转义为\\

你可以试着在 页面中alert 你所谓被转义的字符,打印后 发现是只有一个\的
------其他解决方案--------------------
你说的输出是 在java的控制台输出吧 这时候是 \\

当你把数据在页面js操作的时候 他就是 \ 了
------其他解决方案--------------------
想看看你的代码是如何实现的。
------其他解决方案--------------------
引用:
引用:你说的输出是 在java的控制台输出吧 这时候是 \\

当你把数据在页面js操作的时候 他就是 \ 了
我想输出的就是\u8363\u6e90这样子的,可是直接输出到页面是\\u8363\\u6e90这个样子的,知道了吧。我不想转义成\\的。我需要的就是\u8363


我知道你的意思 , 看看你页面上怎么写的

json-lib 生成是对了,肯定是 \\
------其他解决方案--------------------
因为16进制中是含有 “\”符号的,中文字符都会以“\”符号开头,所以转码后会混淆。
建议:在转码前将所有的“\”替换成“_”或其他非特殊字符,然后转码,通过JS获取带字符串后在将“_” 字符对应的16进制码替换成“\”符号即可。
------其他解决方案--------------------
引用:
你说的输出是 在java的控制台输出吧 这时候是 \\

当你把数据在页面js操作的时候 他就是 \ 了

我想输出的就是\u8363\u6e90这样子的,可是直接输出到页面是\\u8363\\u6e90这个样子的,知道了吧。我不想转义成\\的。我需要的就是\u8363
------其他解决方案--------------------
引用:
想看看你的代码是如何实现的。


public static String escapeUnicode(String s) {
if (s == null) {
return s;
}
char[] chars = s.toCharArray();
char c;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < chars.length; i++) {
c = chars[i]; // Ignore ascii character
if (c > 0xff) {
sb.append("\\u").append(Integer.toHexString(c));
} else {
sb.append(c);
}
}
return sb.toString();
}
public static void jsonData(List list) {
JSONObject jsonObj = new JSONObject();
JSONArray jsonArray = new JSONArray();

for (Object tmp : list) {
HashMap tplHm = (HashMap) tmp;
Iterator iter = tplHm.keySet().iterator();
JSONObject jObj = new JSONObject();
while (iter.hasNext()) {
Object key = iter.next();
try {
/*判断是否中文再进行转码
if (isChinese(tplHm.get(key).toString())) {
jObj.element(key.toString(), URLEncoder.encode(tplHm.get(key).toString(), "UTF-8"));
} else {
jObj.element(key.toString(), tplHm.get(key).toString());
}
*/
//不判断,直接转码为十六进制
jObj.element(key.toString(), escapeUnicode(tplHm.get(key).toString()));
} catch (Exception e) {
}
}
jsonArray.add(jObj);
}
jsonObj.element("data", jsonArray);
try {
ServletActionContext.getResponse().getWriter().write(String.valueOf(jsonObj));
} catch (IOException e) {
e.printStackTrace();
}
}

------其他解决方案--------------------