Java中properties文件中的中文乱码问题

Properties为了方便用户的配置,用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,能让用户够脱离程序本身去修改相关的变量设置,这篇文章主要介绍了Java中properties文件中的中文乱码问题,需要的朋友可以参考下

Properties类是什么?

Properties(Java.util.Properties),该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱离程序本身去修改相关的变量设置。就像在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的。文章源自设计学徒自学网-https://www.sx1c.com/39923.html

Java中properties文件中的中文乱码问题

问题代码:文章源自设计学徒自学网-https://www.sx1c.com/39923.html

1
2
3
4
5
6
7
8
9
10
11
12
13
// 目标:使用Properties读取属性文件中的内容。
        // 1、创建properties对象
         Properties properties = new Properties();
         // 2、使用properties对象加载属性文件中的键值对数据。
         properties.load(new FileInputStream("day10-special-file-log\\src\\users.properties"));
         // 3、确认是否读取出来了
        System.out.println(properties);
        // 4、根据键取值
        String pwd = properties.getProperty("admin");
        System.out.println(pwd);
        properties.forEach((k , v) -> {
            System.out.println(k + "=" + v);
        } );

day10-special-file-log\\src\\users.properties文件里面的内容如下:文章源自设计学徒自学网-https://www.sx1c.com/39923.html

Java中properties文件中的中文乱码问题 -1文章源自设计学徒自学网-https://www.sx1c.com/39923.html

期望输出应该和上面文件的内容一样,结果中文内容输出的是一堆乱码: 1 å¼ æ— å¿Œ=minmin 2 å‘¨èŠ·è‹¥=miejue 3 èµµæ•=wuji 4 admin=123456文章源自设计学徒自学网-https://www.sx1c.com/39923.html

可如果将上面properties.load(new FileInputStream("day10-special-file-log\\src\\users.properties"));换成properties.load(new FileReader("day10-special-file-log\\src\\users.properties"));就能正常输出中文了,那这是什么原因呢?文章源自设计学徒自学网-https://www.sx1c.com/39923.html

其实properties文件中的中文乱码问题主要有以下几个原因:文章源自设计学徒自学网-https://www.sx1c.com/39923.html

1.properties文件的编码格式和Java代码的编码格式不一致。properties文件默认使用ISO-8859-1编码,而Java代码可能使用UTF-8或GBK等编码。这样在读取或写入properties文件时,就会出现中文字符无法正确解析的情况。文章源自设计学徒自学网-https://www.sx1c.com/39923.html

2.properties文件中的中文字符没有经过转换。properties文件只能存储ASCII字符,所以如果要使用中文字符,就需要将其转换为Unicode编码。可以使用native2ascii.exe工具或者IDE的插件来实现这个转换。文章源自设计学徒自学网-https://www.sx1c.com/39923.html

3.在Java代码中指定字符集。在使用FileInputStream或FileWriter等类来读取或写入properties文件时,需要指定相应的字符集,例如UTF-8。可以使用InputStreamReader或OutputStreamWriter等类来包装FileInputStream或FileWriter,并传入相应的字符集参数。文章源自设计学徒自学网-https://www.sx1c.com/39923.html

而properties.load(new FileReader(file))能正常读取的原因是,FileReader默认使用了与properties文件相同的字符编码,即UTF-8。这样就可以正确地解析文件中的中文字符,而不会出现乱码。

可以使用InputStreamReader或OutputStreamWriter等类来包装FileInputStream或FileWriter,并传入相应的字符集参数

示例代码:

1
2
3
4
5
6
7
// 读取文件时指定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);

到此这篇关于Java中properties文件中的中文乱码问题的文章就介绍到这了

继续阅读
我的微信
微信扫一扫
weinxin
我的微信
惠生活福利社
微信扫一扫
weinxin
我的公众号
 
设计学徒自学网
  • 本文由 设计学徒自学网 发表于 2024年2月20日09:35:41
  • 转载请务必保留本文链接:https://www.sx1c.com/39923.html
    本站展示的所有图文软件均来自于互联网,仅用于软件学习研究分享传递,请勿商用,本站如有侵权请联系客服删除。
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖动滑块以完成验证