今天遇到一个很神奇的问题,curl中文接受参数乱码,网上的人遇到的都是返回乱码,我这边是接受请求的接口参数收到的是乱码。
curl http://lyz:123456@localhost:15672/api/exchanges/%2F/exchange2/publish -X POST -H "Content-type:application/json;charset=utf-8" -d "{\"properties\": { \"delivery_mode\": 2 }, \"routing_key\": \"\",\"delivery_mode\": \"2\", \"payload\": \"{\\\"id\\\": \\\"中\\\"}\",\"payload_encoding\": \"string\"}" -i
但是我用我的mac系统或linux系统调用curl,在java项目里打断点,则能接收到中文的。windows却是乱码
原因是windows默认用的gbk编码,然后java项目获取输入流通过utf8编码,
GBK->UTF-8导致一些数据转换不了,会显示方块的乱码符号。
解决办法有2种
方法一、java代码里request获取GBK的输入流
示例如下:
@PostMapping("/test")
public String test(HttpServletRequest request) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(), "GBK"));
String str = "";
String wholeStr = "";
while ((str = reader.readLine()) != null) {//一行一行的读取body体里面的内容;
wholeStr += str;
}
return wholeStr;
}
因为我是rabbitmq消费消息,获取不到request,所以解决不了我的问题
方法二、
修改windows的默认编码
在区域设置里,可以选用UTF-8编码
这个可以解决那个乱码问题,但是会带来一个新问题,很多其他软件文件乱码了
而且只有win10才有这个功能,很不推荐。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏