java使用property中文乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java使用property中文乱码相关的知识,希望对你有一定的参考价值。

使用java读取properties的配置文件,文件中的中文乱码如何解决。说明:不需要使用native2ascii.exe,或者改变文件的编码。用getProperty得到中文字符串直接操作。

你的properties中的中文是经过 ascii转码的吗?比如中文变成了这样子: \\u8be5\\u8d44\\u6e90\\u7c7b\\u578b\\u5df2\\u7ecf\\u5b58\\u5728\\uff01

如果是,那么只需要将读到的字符串做一下转码即可。


你可以在String username=property.getProperty("username");之后,添加JAVA代码也可以将乱码转为中文的。用如下语句就可以了,username =new String(username.getBytes("ISO-8859-1"),"gbk"); 然后再用resultName就可以了,不过这样的话你下面的String password=property.getProperty("password");
都慢慢的通过上面的java代码去转。 
不知道你对反射熟悉不?如果熟悉的话可以通过反射机制去做转码就方便多了!

参考技术A Properties.load把.properties文件的内容当作iso-8859-1编码的,所以需要把取出的属性值用
new String( property.getBytes("iso-8859-1"), "gbk")这句来转码,意思是把当作iso-8859-1编码的字符串反解析成字节数组,然后再根据这个数组及其实际的编码(即gbk)重新构造字符串

Java读取properties文件工具类并解决控制台中文乱码

1、建立properts文件(error.message.properties

 

HTTP201= 请求成功并且服务器创建了新的资源

 

 技术分享图片

 

2、spring-mvc.xml文件(applicationContext-mvc.xml)中配置properties工具类路径及读取properties文件的路径 

<bean id="propertyConfigurer" class="com.yjlc.platform.utils.PropertyConfigurer"  >
   <property name="ignoreUnresolvablePlaceholders" value="true"/>
   <property name="ignoreResourceNotFound" value="true"/>
   <property name="locations">
      <list>
         <value>classpath:error.message.properties</value>
      </list>
   </property>
   <property name="fileEncoding" value="UTF-8"></property>
</bean>

  技术分享图片

3、建立properts读取工具类 

package com.yjlc.platform.utils;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

import java.util.Properties;

/**
 * --------------------------------------------------------------
 * CopyRights(c)2018,YJLC
 * All Rights Reserved
 * <p>
 * FileName: PropertyConfigurer.java
 * Description:错误信息文件读取工具类
 * Author: cyb
 * CreateDate: 2019-01-18
 * --------------------------------------------------------------
 */
public class PropertyConfigurer extends PropertyPlaceholderConfigurer {
    private Properties props;       // 存取properties配置文件key-value结果

    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props)
            throws BeansException {
        super.processProperties(beanFactoryToProcess, props);
        this.props = props;

    }
//输入配置文件中的key 获取对应的值
    public String getProperty(String key){
        return  new String(props.getProperty(key));

    }

    public String getProperty(String key, String defaultValue) {
        return this.props.getProperty(key, defaultValue);
    }

    public Object setProperty(String key, String value) {
        return this.props.setProperty(key, value);
    }
}

 

  

4、建立对应的service及实现类 

(1) Service接口(GetMessageInfoService )

package com.yjlc.platform.upgrade.common.service;

import java.io.UnsupportedEncodingException;

/**
 * --------------------------------------------------------------
 * CopyRights(c)2018,YJLC
 * All Rights Reserved
 * <p>
 * FileName: GetMessageInfoService.java
 * Description:获取错误信息service
 * Author: cyb
 * CreateDate: 2019-01-18
 * --------------------------------------------------------------
 */
public interface GetMessageInfoService {
    
    /**
     * 第四种实现方式获取properties文件中指定key的value
     *
     * @param key
     *
     * @return
     */
    String getProperyByFourthWay(String key) throws UnsupportedEncodingException;

    /**
     * 第四种实现方式获取properties文件中指定key的value
     *
     * @param key
     *
     * @param defaultValue
     *
     * @return
     */
    String getProperyByFourthWay(String key, String defaultValue);


}

  

 

Service实现类

 

package com.yjlc.platform.upgrade.common.service.impl;

import com.yjlc.platform.upgrade.common.service.GetMessageInfoService;
import com.yjlc.platform.utils.PropertyConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * --------------------------------------------------------------
 * CopyRights(c)2018,YJLC
 * All Rights Reserved
 * <p>
 * FileName: PropertiesServiceImpl.java
 * Description:获取错误信息service实现类
 * Author: cyb
 * CreateDate: 2019-01-18
 * --------------------------------------------------------------
 */
@Service
public class GetMessageInfoServiceImpl implements GetMessageInfoService {

    @Autowired
    private PropertyConfigurer pc;


    @Override
    public String getProperyByFourthWay(String key) {
        return pc.getProperty(key);
    }

    @Override
    public String getProperyByFourthWay(String key, String defaultValue) {
        return pc.getProperty(key, defaultValue);
    }


}

 

  

 


5、调用测试

@Controller
@RequestMapping("/upInformation/")
public class UPInformationController {
    @Autowired
    GetMessageInfoService getMessageInfoService;

@RequestMapping("forwardInfo")
@ResponseBody
public Map<String,Object> forwardInfo(UPInformationComment informationComment,String status) throws UnsupportedEncodingException {
    Map<String,Object> map = new HashMap<>();

    String value= getMessageInfoService.getProperyByFourthWay("HTTP201");

}

}

  


6、控制台打印中文乱码问题解决 

找到intellij idea安装目录,bin文件夹下面idea64.exe.vmoptions和idea.exe.vmoptions这两个文件,分别在这两个文件中添加:-Dfile.encoding=UTF-8
第二步:找到intellij idea的file---settings---Editor---FileEncodings的GlobalEncoding和ProjectEncoding和Default encoding for properties都配置成UTF-8
第三步:在部署Tomcat的VM options项中添加:-Dfile.encoding=UTF-8

技术分享图片
第四步:重启Intellij idea即可解决乱码问题(一定要关闭idea重新打开)

此篇博客,本人参照了以下博主的内容,再根据自己的需求进行了整合,若需要查看详细内容,大家可以前往以下链接查看:https://www.cnblogs.com/hafiz/p/5876243.html#commentform 

技术在于交流!






以上是关于java使用property中文乱码的主要内容,如果未能解决你的问题,请参考以下文章

读取Properties文件以及中文乱码问题

Java读取properties文件工具类并解决控制台中文乱码

java读取配置文件以及中文乱码问题

读取properties中文乱码解决

Properties文件中文属性读取是乱码问题

springboot使用i18n时properties文件中文乱码