Java 使用 ResourceBundle 类读取 properties 文件中文乱码的解决方案

Wesley13
• 阅读 954

Java使用java.util.ResourceBundle类的方式来读取properties文件时不支持中文,要想支持中文必须将文件设置为ISO-8859-1编码格式,这对于开发工具默认为UTF-8来说很不友好,而且就算用ISO-8859-1编码,当其他人将这个项目导入开发工具时很容易出现这个properties文件中的内容有乱码(前提是该文件中包含中文)。

//传统的解决方式:文件设置为ISO-8859-1编码格式

public static void main(String[] args) {
    ResourceBundle rb = ResourceBundle.getBundle("weixinreply");
    String kefuReply = null;
    try {
        //这样直接读取中文会乱码
        kefuReply = rb.getString("kefureply_festival");
        System.out.println("kefuReply=" + kefuReply);
        //这样读取中文不会乱码
        kefuReply = new String(rb.getString("kefureply_festival").getBytes("ISO-8859-1"),"GBK");/
        System.out.println("kefuReply=" + kefuReply);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

//更加人性化的解决方式:文件设置为UTF-8编码格式,并且在spring加载properties文件时指定为UTF-8编码格式,在使用的类中通过spring的 @Value("${key}")注解来获取properties文件中对应的值。
app-env-config.xml文件中定义如下内容

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="fileEncoding" value="UTF-8"/>
    <property name="locations">
        <list>
            <value>classpath:weixinreply.properties</value>
        </list>
    </property>
</bean>

app-env-config.xml需要在applicationContext.xml文件中引入,这样才能保证 @Value("${key}")注解在Controller层和Service层都能获取到值,否者很容易造成 @Value("${key}")注解在Controller层获取不到值而报错。

参考:

https://blog.csdn.net/zsg88/article/details/74852942

https://blog.csdn.net/J3oker/article/details/53839210

https://blog.csdn.net/Weiral/article/details/52875307

https://blog.csdn.net/qq_21033663/article/details/78067983

https://blog.csdn.net/Brookes/article/details/1508539

https://blog.csdn.net/joecheungdishuiya/article/details/6304993

全文完

:)

原文地址:

https://www.cnblogs.com/poterliu/p/10159577.html

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
菜鸟阿都 菜鸟阿都
2年前
tomcat输出控制台信息乱码
使用idea开发java项目时,将其打包成war包,并使用tomcat启动,但控制台输出的中文信息乱码,与大家分享一下解决方案控制台乱码信息如下解决方案:修改文件位置:apachetomcat9.0.44\conf\logging.properties将其中的5处UTF8编码修改为GBK重启项目,idea控制台输出的tomcat部署信息乱码问题得到了解决
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
java读取properties文件总结
一、java读取properties文件总结在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResourceAsStream方法和InputStream流去读取properties文件,使用getRe
Wesley13 Wesley13
2年前
java编码问题总结
对于Java,由于默认的编码方式是UNICODE,所以用中文也易出问题,常见的解决是:Strings2newString(s1.getBytes(“ISO88591”),”GBK”);1、utf8解决JSP中文乱码问题一般说来在每个页面的开始处,加入:<%@pagelanguage"java"contentTyp
Wesley13 Wesley13
2年前
java读取中文文本文件乱码问题
今天遇到的问题是这样:用java读取一个中文文本文件,但读取到的却是乱码,之前一直没有问题,查清楚后,原来是因为今天是用的windows的记事本来编辑的文件,因编码方式是的不同而导致了乱码,解决方法就是设置编码方式为“UTF8”,设置方法如下:FilefilenewFile("文件路径");Readerreader
Stella981 Stella981
2年前
NodeJS 中文乱码解决
如果使用NodeJS。当有中文时,如果不做任何处理就会出现乱码。因为,NodeJS不支持GBK。当然,UTF8是支持的。所以,要确保不出现乱码: 1.保证你的JS文件是以UTF8格式保存的。 2.在你的JS文件中的writeHead方法中加入"charsetutf8"编码,如下例所示:  varhttpr
Wesley13 Wesley13
2年前
Java基础学习总结(15)——java读取properties文件总结
一、java读取properties文件总结  在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResourceAsStream方法和InputStream流去读取properties文件,使用get
Wesley13 Wesley13
2年前
Java 读取Properties文件时应注意的路径问题
1\.使用Class的getResourceAsStream()方法读取Properties文件(资源文件)的路径问题:      InputStreaminthis.getClass().getResourceAsStream("资源Name");    注意:    (1)这种方式要求Properties资源文件必须与当
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这