美文网首页
HttpServletRequest读取body时GBK与UTF

HttpServletRequest读取body时GBK与UTF

作者: 妖云小离 | 来源:发表于2017-11-01 15:54 被阅读0次

测试后发现存在单数中文乱码问题,
找了半天原来是读取post请求的body时
我用了readLine方法,他默认的是GBK解码,
然而body里的数据是UTF-8编码的
GBK一个字符2个字节,UTF-8一个字符3个字节,
当用GBK去读(解码)UTF-8编码后的内容,
当UTF-8字符是奇数个的时候,GBK解码之后会多出一位字节,那只能用'?'字节(63)来替换
readLine先乱码之后,最后一个字符变为?
所以即使再转码也会出现最后一个中文字符是?的乱码问题
解决方法:
改用inputStream直接读byte,之后再转为utf-8

//字符串读取
void charReader(HttpServletRequest request) {
BufferedReader br = request.getReader();
String str, wholeStr = "";
while((str = br.readLine()) != null){
wholeStr += str;
}
System.out.println(wholeStr);
}
//二进制读取
void binaryReader(HttpServletRequest request) {
int len = request.getContentLength();
ServletInputStream iii = request.getInputStream();
byte[] buffer = new byte[len];
iii.read(buffer, 0, len);
}

相关文章

网友评论

      本文标题:HttpServletRequest读取body时GBK与UTF

      本文链接:https://www.haomeiwen.com/subject/ccrgpxtx.html