首页 > 编程语言 >Java中properties文件中的中文乱码问题

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

时间:2023-08-03 23:00:37浏览次数:39  
标签:文件 中文 Java UTF Properties 乱码 new 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);

 

标签:文件,中文,Java,UTF,Properties,乱码,new,properties
From: https://www.cnblogs.com/FangwayLee/p/17604717.html

相关文章

  • Java面试题 P54:微服务篇:微服务-服务注册和发现是什么意思?SpringCloud如何实现服务注册
              ......
  • JavaSE--第一个java程序的解释说明以及注释
    一、注释共有三种注释,java程序运行时会过滤掉注释,也就是说注释是不会运行的1、单行注释//两个斜杠//在这里面随便写 2、多行注释/*多行注释可以在这个里面写多行。。。。。*/3、javadoc注释自动被javadoc.exe命令解析提取并生成到帮助文档中/***类的注释信息*......
  • Java面试题 P55:微服务篇:微服务-你们项目中负载均衡如何实现的?
         ......
  • JAVA安全-JWT安全&预编译CASE注入
    通过前期的WEB漏洞的学习,掌握了大部分的安全漏洞的原理及利用,但在各种脚本语言开发环境的差异下,会存在新的安全问题,其中脚本语言类型PHP,Java,Python等主流开发框架会有所差异。Javaweb-SQL注入攻击-预编译机制绕过1. SQL注入的防御---防御sql注入:1.session2.参数绑......
  • JavaSE--jdk的安装以及环境变量相关
    一、jdk的安装在oracle官网安装javase即可,有exe和zip两种jdk的bin目录下有javac.exe负责编译,java.exe负责运行二、有关环境变量的配置1、配置环境变量path的步骤桌面计算机右击》属性》高级系统设置》环境变量path环境变量当中都是路径,路径与路径之间必须用英文半角分开2......
  • JavaSE--JDK、JRE、JVM三者之间的关系
    JDK:Java开发工具箱JRE:Java运行环境JVM:java虚拟机JDK包括JRE,JRE包括JVM。jvm是不能独立安装的,但是jre和jdk是可以单独安装的安装jdk后jre自动就安装了安装jre后jvm就自动安装了 问题:在客户进行项目部署时,把项目跑起来,需要安装jdk么?只需要安装jre就行,jre体积小,安装便捷 Java体......
  • Java面试题 P49:框架篇:MyBatis是否支持延迟加载?
         未配置延迟加载的执行结果: =========================================启用MyBatis延迟加载:     同样可以达到刚才的效果。   ......
  • mysql插入报错java.sql.SQLException: Incorrect string value: '\xF0\x9F\x87\xA
    背景环境java8,centos7.9,mysql8.0.34新装的环境,默认给装了mysql8,想着与时俱进用下新版,结果插入就报错java.sql.SQLException:Incorrectstringvalue:'\xF0\x9F\x87\xA8\xF0\x9F...'forcolumn解决方法这个错误通常是由于MySQL数据库中的字符集不支持存储特定的字符或表情符......
  • JavaScript之变量
    一:变量的概述简单来说,变量就是一个装东西的盒子。二:变量在内存中的存储本质:变量是程序在内存中申请的一块用来存放数据的空间。类似我们酒店的房间,一个房间就可以看做是一个变量。三:变量的使用变量在使用时分为两步:1.声明变量2.赋值1.声明//声明变量varage;//声明一个名称为a......
  • 【Java基础】Java 入门第一步
    ......