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中文乱码的主要内容,如果未能解决你的问题,请参考以下文章