关于编码,乱码
程序员文章站
2022-04-18 18:30:50
...
起因:今天在改一段代码 大意是要求从一个property文件中读取内容 key是数字 value是字符串(汉字) 然后放到map里面 作为错误代码和错误提示信息的动态映射。
这样的一段代码
InputStream is = this.getClass().getClassLoader().getResourceAsStream(configFile);
// InputStreamReader ir = new InputStreamReader(is);
Properties prop = new Properties();
prop.load(is); //prop.load(ir);
for (Entry<Object, Object> entry : prop.entrySet()) {
String key = (String) entry.getKey();
String value = (String) entry.getValue();
if (key != null && (key = key.trim()).length() > 0
&& value != null && (value = value.trim()).length() > 0)
{
mapping.put(key, value);
}
}
开始的时候 读入字节流 用Properties的一个load方法 再放到map里面
这样问题出来了 乱码。。。
小看了一下 因为文件是用utf-8编码 而对应到这里是字节流 javadoc对 load(InputStream in) 有这样一段说明“here is assumed to use the ISO 8859-1 character encoding; that is each byte is one Latin1 character.”
因此会出现乱码的问题 。
好在properties也有对应的这样的方法 load(Reader reader) 这样只需要讲inputStream 改变成 Reader即可
于是有了注释掉的那段代码 这里java io又该复习复习了。。。
另外这个状况 很好的反应了编码乱码 字符字节的问题 应该留意
两个url记录了 编码问题 看一下 http://www.360doc.com/content/06/1020/18/3500_235455.shtml
http://blog.renren.com/share/68464/3096404244