解决 properties.getProperty() 字符串中文乱码的情况
错误实例
InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties properties = new Properties();
properties.load(in);
String username = properties.getProperty("username");
String password = properties.getProperty("password");
System.out.println(username+" "+password);
resp.getWriter().print(username +" "+password);
原理分析
InputStream 字节流来读取中文字符,肯定乱码啦
解决方法有两种
第一种
1、Properties文件默认机制是采用ISO8859-1处理
2、用ISO8859-1对GBK编码的内容进行解码
代码如下:
InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties properties = new Properties();
properties.load(in);
String username = properties.getProperty("username");
//修改地方
username= new String(username.getBytes("ISO8859-1"), "utf-8");
String password = properties.getProperty("password");
System.out.println(username+" "+password);
resp.getWriter().print(username +" "+password);
第二种
读取流进行字符设置
InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
InputStreamReader isr = new InputStreamReader(in, "UTF-8");
BufferedReader br = new BufferedReader(isr);
Properties properties = new Properties();
properties.load(br);
String username = properties.getProperty("username");
String password = properties.getProperty("password");
System.out.println(username+" "+password);
resp.getWriter().print(username +" "+password);
总结
1、对流进行处理,可以在转化流和读取流进行时进行字符集设置
2、本文流的读取默认为:机制是采用ISO8859-1