1.前言

因为装系统的时候把中文写在了系统路径,现在我想把这个路径写在properties里面来读取,可是

发现java 读取会导致中文乱码成 问号????的乱码  ,百度找了好多博客,基本都是一摸一样的抄袭,估计能不能用都不知道就复制上去了,

没良心的帖子。

2.追击原因

查找原因,是因为Java以二进制流的方式读取properties ,导致无法识别中文,

网上有两种的解决思路:

方法一是读取的时候以 文件读取方式 new InputStreamReade 来读取并设定编码格式 , 就像这样,

,经测试,失败,中文仍然是问号来替代。

方法二是 在properties配置文件里,不直接写中文,而是以其他编码格式替代 ,可以使用 native2ascii.exe 来将配置文件转换 。

缺点:可是这有可能影响开发的效率,在中文数据比较少的的时候,没必要这样杀鸡用牛刀 ,不然每次测试都需要将整个文件重新编码再替代,太慢了!!!!

3.我的解决方式

知道原理,解决起来就有思路了,既然这样,那我每次将有中文的数据都装成unicode编码再放入properties文件里面,像这样

,再需要的地方再将Unicode编码转成utf-8即可

我集成了个工具【点击查看】

 1 package cn.cen2guo.clinic.util;
2
3 public class Unicode {
4 /**
5 * 字符串转unicode, 【properties文件专用】
6 */
7 public static String stringToUnicode(String str) {
8 StringBuilder sb = new StringBuilder();
9 char[] c = str.toCharArray();
10 for (char value : c) {
11 sb.append("\\").append("\\u").append(Integer.toHexString(value));
12 }
13 return sb.toString();
14 }
15
16 /**
17 * 字符串转unicode, 【java 正常使用】
18 */
19 public static String stringToUnicode2(String str) {
20 StringBuilder sb = new StringBuilder();
21 char[] c = str.toCharArray();
22 for (char value : c) {
23 sb.append("\\u").append(Integer.toHexString(value));
24 }
25 return sb.toString();
26 }
27
28 /**
29 * unicode转字符串
30 */
31 public static String unicodeToString(String unicode) {
32 StringBuilder sb = new StringBuilder();
33 String[] hex = unicode.split("\\\\u");
34 for (int i = 1; i < hex.length; i++) {
35 int index = Integer.parseInt(hex[i], 16);
36 sb.append((char) index);
37 }
38 return sb.toString();
39 }
40
41 }

Unicode.class

怎么使用呢?看测试

4.测试

5.注意

之所以有 properties文件专用 的方法,是因为properties文件里 符号 \ 必须要被另一个  \ 注解才可以视为字符串 ,为了方便

将编码好的数据直接放到properties 文件里 ,才这样做 ,不然得手动加  。

properties 取出数据后 前面得 \ 会自动去掉得 ,因此 正常 将unicode 转 utf-8 即可。

读取 properties 配置文件含有中文的value内容 导致中文乱码 的解决办法的更多相关文章

  1. properties配置文件在idea中默认utf-8编码可能会乱码的解决

    使用idea集成开发环境时,有时在properties配置文件有中文,在线上拿到的时乱码,如何解决? 这样设置: 最后说一下,setting设置是对当前项目的,想要所有的项目都有相同的设置,需要在 中 ...

  2. gVim 中文内容显示为乱码的解决办法

    http://blog.csdn.net/sunmanzth/article/details/6143600打开vimrc文件,在vim的安装目录下可以找到该文件,或在windows下是在vim/gv ...

  3. 关于JAVA中URL传递中文参数,取值是乱码的解决办法

    前几天看到有网友在问URLDecoder和URLEncoder方面的使用问题,突然想起,原来我刚遇到这两个类时,也觉得很神密,由此可以想想初学者的心情,于是便有了今天的这篇文章. 其实,这两个类的使用 ...

  4. Springboot 之 解决IDEA读取properties配置文件的中文乱码问题

    问题描述 当在.properties的配置文件中有中文时,读取出来的总是乱码.比如我的application.properties配置文件的内容如下: server.port=9090 test.ms ...

  5. 读取.properties配置文件

    方法1 public  class SSOUtils { protected static String URL_LOGIN = "/uas/service/api/login/info&q ...

  6. Java 读取 .properties 配置文件

    java 开发中,经常要读取 properties 配置文件,下面介绍几种读取方式: 1.基于 InputStream 读取配置文件 该方式的优点在于可以读取任意路径下的配置文件 Properties ...

  7. java读取properties配置文件总结

    java读取properties配置文件总结 在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等.而我们经常读取配置文件的方法有以下两种: (1) ...

  8. Java读取Properties配置文件

    1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,使用键值对的形式来保存属性集.不过Properties的键和值都是字符串 ...

  9. Java 读取 .properties 配置文件的几种方式

    Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配 ...

随机推荐

  1. Spring Cloud Alibaba 整合 Nacos 实现服务配置中心

    在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...

  2. vm16虚拟机安装win11

    vm16虚拟机安装win11 参考https://baijiahao.baidu.com/s?id=1712702900207158969&wfr=spider&for=pc win1 ...

  3. Jenkins触发构建

    目录 一.简介 二.时间触发 定时触发 轮询代码仓库 三.事件触发 由上游任务触发 gitlab通知触发 四.通用触发接口 GWT 提取参数 触发某个具体项目 过滤请求值 控制打印内容 控制响应 一. ...

  4. 如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  5. 初探Windows用户态调试机制

    我们在感叹Onlydbg强大与便利的同时,是否考虑过它实现的原理呢? 作为一个技术人员知其然必知其所以然,这才是我们追求的本心. 最近在学习张银奎老师的<软件调试>,获益良多.熟悉Wind ...

  6. 新建日历(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 默认的标准日历设置好了以后,问题又来了:出现某些特殊的原因,可能还需要一个与标准日历设置不同的日历,这个可怎么弄? 没关系 ...

  7. 『与善仁』Appium基础 — 25、APP模拟手势高级操作

    目录 1.手指轻敲操作 2.手指按下和抬起操作 3.等待操作 4.手指长按操作 5.手指移动操作 6.综合练习 APP模拟手势的动作都被封装在TouchAction类中,TouchAction是App ...

  8. LuoguP4759 [CERC2014]Sums 题解

    Content 给定 \(t\) 组数据,每组数据给定一个数 \(n\),判断 \(n\) 是否能够分解成连续正整数和,能的话给出最小数最大的方案. 数据范围:\(1\leqslant n\leqsl ...

  9. Tornado 异步浅解

    7.1 认识异步 1. 同步 我们用两个函数来模拟两个客户端请求,并依次进行处理: #!/usr/bin/env python3 # -*- coding:utf-8 -*- # @Time: 202 ...

  10. MAMP的使用

    MAMP下载并安装 下载地址:https://pan.baidu.com/s/1TgoKBG3F59NGO8lEj9mf4Q 密码:2m3d 安装:按照提示,一直下一步直到完成 MAMP操作