前几天在实验室开发项目,Android端通过局域网ip访问实验室一台机器,实现Android上对json的解析,由于过两天要回家,实验室外网又访问不了,所以只能自己做一个伪服务器端,就是读取本地一个有json代码的txt文件,假装成一个服务器返回的字符串。但是中文显示都是乱码。代码如下:
InputStream is = context.getResources().openRawResource(R.raw.json);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String str = "";
try {
str = br.readLine();
while(str != null)
{
sb.append(str);
str = br.readLine();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response = sb.toString();
由于Java是用UNICODE编码,一个中文占两个字节,inputstream读取的是字节流,所以当然会乱码。换成下面一种方法就可以了。
InputStream is = context.getResources().openRawResource(R.raw.json);
ByteArrayBuffer bb = new ByteArrayBuffer(500);
int current=0;
String str = "";
try {
while((current = is.read())!=-1)
{
bb.append(current);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response = EncodingUtils.getString(bb.toByteArray(),"GB2312");
测试代码,命名很不规范,请见谅。代码,由于不了解输入输出流,只能按自己的理解,就是inputstream文件读入一个输入流,并用current记录字节数,然后BtyeArrayBuffer::append(int)从输入流获取刚才读取的字节流,再按GB2312编码。得到中文String.