读书人

json-lib转义有关问题。自己方法把中文

发布时间: 2012-12-19 14:13:14 作者: rapoo

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

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


引用:
引用:
引用:你说的输出是 在java的控制台输出吧 这时候是 \\

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

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

主要是我不需要他帮我转义啊。我只想让它输出我直接传入的东西,有没有办法不让他转义?或者里面有没有方法直接对中文进行十六进制转换?
[其他解释]
算了,我自己写了个JSON库自用了,不依赖其他包。谢谢大家的回复。有兴趣的可以去使用。
http://suleil1.blog.163.com/blog/static/4501288220121094316138/

读书人网 >J2EE开发

热点推荐