目录
1 前言:
2 本地环境中的解决方案(以idea为例)
3 全部解决方案
1 前言:
初用properties,读取java properties文件的时候如果value是中文,会出现乱码
的问题。我们首先需要明了乱码问题的根源。在 Java 中,字符通常以 Unicode 编码表示,而 Properties 类默认采用 ISO-8859-1 编码来处理字符。因此,当我们在 Properties 文件中存储中文字符时,就可能导致乱码问题的出现。
2 本地环境中的解决方案(以idea为例)
将上述默认encoding设置为utf-8,并勾选右侧复选框。即可实现application.properties中的中文值的读取,仅限于本地环境。
3 全部解决方案
- 使用UTF-8编码:将Properties文件的编码格式设置为UTF-8,可以避免中文乱码问题。可以通过在读取和写入Properties文件时,指定字符编码为UTF-8来实现。例如:
Properties properties = new Properties(); try (InputStream inputStream = new FileInputStream("config.properties")) { properties.load(new InputStreamReader(inputStream, "UTF-8")); } catch (IOException e) { e.printStackTrace(); try (OutputStream outputStream = new FileOutputStream("config.properties")) { properties.store(new OutputStreamWriter(outputStream, "UTF-8"), null); } catch (IOException e) { e.printStackTrace();
- 转换编码:如果无法修改Properties文件的编码格式,我们可以在读取和写入Properties文件时,进行编码转换。例如,将ISO-8859-1编码的字符串转换为UTF-8编码的字符串:
在写入Properties文件时,也需要进行相应的编码转换:String value = properties.getProperty("key"); String utf8Value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
String utf8Value = "中文"; String isoValue = new String(utf8Value.getBytes("UTF-8"), "ISO-8859-1"); properties.setProperty("key", isoValue);
- 使用Unicode转义序列:如果以上方法都无法解决问题(目前本人遇到的就是这种情况),我们可以使用Unicode转义序列来表示中文字符。在配置文件文件中将需要配置的中文换成unicode编码。使用@value注解读取时会自动转码。
# 需要过滤的区域名称字段 #filter.region.name=检测机构,检测站,检车站,检车,服务机构,查验机构,安检,服务站,查验区,车管所,报废库,监测,检测 filter.region.name=\u68c0\u6d4b\u673a\u6784,\u68c0\u6d4b\u7ad9,\u68c0\u8f66\u7ad9,\u68c0\u8f66,\u670d\u52a1\u673a\u6784,\u67e5\u9a8c\u673a\u6784,\u5b89\u68c0,\u670d\u52a1\u7ad9,\u67e5\u9a8c\u533a,\u8f66\u7ba1\u6240,\u62a5\u5e9f\u5e93,\u76d1\u6d4b,\u68c0\u6d4b # 需要过滤的点位名称字段 #filter.camera.name=查验,检验 filter.camera.name=\u67e5\u9a8c,\u68c0\u9a8c