Java中properties文件中的中文乱码问题
1 // 目标:使用Properties读取属性文件中的内容。 2 // 1、创建properties对象 3 Properties properties = new Properties(); 4 5 6 // 2、使用properties对象加载属性文件中的键值对数据。 7 properties.load(new FileInputStream("day10-special-file-log\\src\\users.properties")); 8 9 // 3、确认是否读取出来了 10 System.out.println(properties); 11 12 // 4、根据键取值 13 String pwd = properties.getProperty("admin"); 14 System.out.println(pwd); 15 16 properties.forEach((k , v) -> { 17 System.out.println(k + "=" + v); 18 } );
day10-special-file-log\\src\\users.properties文件里面的内容如下:
期望输出应该和上面文件的内容一样,结果中文内容输出的是一堆乱码: 1 å¼ æ å¿=minmin 2 å¨è·è¥=miejue 3 èµµæ=wuji 4 admin=123456
可如果将上面 properties.load(new FileInputStream("day10-special-file-log\\src\\users.properties"));换成 properties.load(new FileReader("day10-special-file-log\\src\\users.properties"));就能正常输出中文了,那这是什么原因呢?
其实properties文件中的中文乱码问题主要有以下几个原因:
1.properties文件的编码格式和Java代码的编码格式不一致。properties文件默认使用ISO-8859-1编码,而Java代码可能使用UTF-8或GBK等编码。这样在读取或写入properties文件时,就会出现中文字符无法正确解析的情况。
2.properties文件中的中文字符没有经过转换。properties文件只能存储ASCII字符,所以如果要使用中文字符,就需要将其转换为Unicode编码。可以使用native2ascii.exe工具或者IDE的插件来实现这个转换。
3.在Java代码中指定字符集。在使用FileInputStream或FileWriter等类来读取或写入properties文件时,需要指定相应的字符集,例如UTF-8。可以使用InputStreamReader或OutputStreamWriter等类来包装FileInputStream或FileWriter,并传入相应的字符集参数。
而properties.load(new FileReader(file))能正常读取的原因是,FileReader默认使用了与properties文件相同的字符编码,即UTF-8。这样就可以正确地解析文件中的中文字符,而不会出现乱码。
可以使用InputStreamReader或OutputStreamWriter等类来包装FileInputStream或FileWriter,并传入相应的字符集参数
示例代码:
// 读取文件时指定UTF-8编码 Properties p = new Properties(); p.load(new InputStreamReader(new FileInputStream("config.properties"), "UTF-8")); // 写入文件时指定UTF-8编码 Properties p = new Properties(); p.setProperty("name", "李芳"); p.store(new OutputStreamWriter(new FileOutputStream("config.properties"), "UTF-8"), null);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)