javascript - post json 中文编码问题

查看:154
本文介绍了javascript - post json 中文编码问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

帮朋友搞得一段程序,是易语言环境的post,我要传递一串带有中文的JSON给node服务器.字符串如下

{"itemdata":{"nType":"1","nBaoYou":"0","szItemId":"536347062406","title":"秋冬新款女装韩版半高领毛 衣女加厚修身显瘦长袖套头针织衫打底衫","secondTitle":"","imgURL":"http://img4.tbcdn.cn/tfscom/i1/TB1OniJLXXXXXXzXpXXXXXXXXXX_!!0-item_pic.jpg","promotionTxt":"限时秒杀价","fOldPrice":"108","fThirdPrice":"0","fCommissionPer":"10.5","fCommission":"2.08","nTgCount":"0","nSellCount":"37","fPingFen":"0","nPingjiaCount":"5","szTgURL":"","szWebTgURL":"","szBlogTgURL":"","shortUrl":"","szDesc":"","nick":"艾伦圣玛旗舰店","coupon":""}}  

然后,服务器接受到以后显示的是乱码,

然后用postman 测试发现只有raw json 才能正确发送和接收,
于是我上网查什么是raw ,查到是不进行任何数据编码传送,直接传递数据,
最后我想到,难道是语言环境的文本编码问题?
因为postman 是js 写的,所以Postman 没有语言环境编码的差异,
所以才会正常传送?如果是这样理论上发送的时候把发送环境的编码弄成和js 一样的编码应该也可以呀?
于是我想请问,如何做才能像js 一样只在发送端处理成为正确的json 就可以解决编码问题?
因为如果转码成utf8 的话,服务端还是要再解码一遍.作为一个技术,不想放弃最优方案.所以请问大神如何解决?

解决方案

我也有这个问题,不知道楼主解决了没有,过滤器也加了,服务器的配置也写了,还是乱码、、

-----------------------------------华丽的分割线------------------------------

调了一上午我发现我的问题在哪里了

bodyReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
body = bodyReader.readLine();

代码中通过以上方式将请求的内容转换为字符串

没有指定字符集,通过源码看到使用了默认的字符集,sun.nio.cs.StreamDecoder类如下方法

    public static StreamDecoder forInputStreamReader(InputStream var0, Object var1, String var2) throws UnsupportedEncodingException {
        String var3 = var2;
        if(var2 == null) {
            var3 = Charset.defaultCharset().name();
        }

        try {
            if(Charset.isSupported(var3)) {
                return new StreamDecoder(var0, var1, Charset.forName(var3));
            }
        } catch (IllegalCharsetNameException var5) {
            ;
        }

        throw new UnsupportedEncodingException(var3);
    }

然后我本地环境的默认字符集是GBK,然后解码时导致乱码
可以通过设置JVM参数,-Dfile.encoding=UTF-8
强制将默认字符集调整为UTF-8,然后顺利的解决了我的问题

这篇关于javascript - post json 中文编码问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆