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

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

Properties类是什么?

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

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

问题代码:

 // 目标:使用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文件里面的内容如下:

期望输出应该和上面文件的内容一样,结果中文内容输出的是一堆乱码: 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);

到此这篇关于Java中properties文件中的中文乱码问题的文章就介绍到这了,更多相关java properties文件中文乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭详解

    Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭详解

    这篇文章主要给大家介绍了关于Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-05-05
  • 关于Intellij IDEA中的Version Control问题

    关于Intellij IDEA中的Version Control问题

    这篇文章主要介绍了Intellij IDEA中的Version Control问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • Java深入浅出数组的定义与使用下篇

    Java深入浅出数组的定义与使用下篇

    数组是有序的元素序列,若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式
    2022-03-03
  • SpringBoot基于过滤器和内存实现重复请求拦截功能

    SpringBoot基于过滤器和内存实现重复请求拦截功能

    这篇文章主要介绍了SpringBoot基于过滤器和内存实现重复请求拦截,这里我们使用过滤器的方式对进入服务器的请求进行过滤操作,实现对相同客户端请求同一个接口的过滤,需要的朋友可以参考下
    2023-01-01
  • java多线程开发ScheduledExecutorService简化方式

    java多线程开发ScheduledExecutorService简化方式

    这篇文章主要为大家介绍了java多线程开发ScheduledExecutorService的简化方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • Spring Boot的Controller控制层和页面

    Spring Boot的Controller控制层和页面

    这篇文章主要介绍了Spring Boot的Controller控制层和页面,需要的朋友可以参考下
    2017-04-04
  • Java的Struts框架中<results>标签的使用方法

    Java的Struts框架中<results>标签的使用方法

    这篇文章主要介绍了Java的Struts框架中<results>标签的使用方法,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-11-11
  • Spring之异步任务@Async解读

    Spring之异步任务@Async解读

    这篇文章主要介绍了Spring之异步任务@Async,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 基于java实现画图板功能

    基于java实现画图板功能

    这篇文章主要为大家详细介绍了基于java实现画图板功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 基于Java实现Avro文件读写功能

    基于Java实现Avro文件读写功能

    大家好,本篇文章主要讲的是基于Java实现Avro文件读写功能,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02

最新评论