问题
之前对接一个webService服务,将返回的数据解析后插入数据后发现有个别中文乱码的问题。
解决过程
- 就只有一小部分乱码,而不是全部,故排除编码错误的问题。
- 用soapUI请求该接口,发现返回的数据并不存在乱码问题,也排除对方发来的数据存在问题
- 那应该就是代码在解析的过程中出现了问题
- 最终发现是因为用字节流的方式读取返回的数据出现了问题
- 出错的核心代码如下
// 7,服务端返回正常:
int code = con.getResponseCode();
if (code == 200) {// 服务端返回正常
InputStream is = con.getInputStream();
byte[] b = new byte[1024];
StringBuffer sb = new StringBuffer();
int len = 0;
/*返回的数据是中英文混合的,UTF-编码中文字符占3个字节,每次都从字节流里读取1024个字节,
* 这并不能保证最后一个中文字符能够完整的读取,可能只读了一个中文字符的一个字节或两个字节,这样就造成了中文字符乱码问题
* */
while ((len = is.read(b)) != -1) {
String str = new String(b, 0, len, "UTF-8");
sb.append(str);
}
responseBody = sb.toString();
is.close();
}
con.disconnect();
使用inputStreamReader包装下输入流,逐个字符读取,便能解决中文乱码问题
int code = con.getResponseCode();
if (code == 200) {// 服务端返回正常
InputStream is = con.getInputStream();
StringBuffer sb = new StringBuffer();
InputStreamReader isr = new InputStreamReader(is,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
responseBody = sb.toString();
is.close();
}
con.disconnect();