properties文件的编码问题

2023-11-07

背景

在复习基础知识的时候, 先复习了properties, 然后又突然心血来潮试了一下使用流直接读取properties文件, 发现使用中文的时候, 两者好像有些不太一样, 使用流读取中文的时候显示的是ascii编码, 而properties获取到的是正确的编码. 下方我将简单的说明一下这些问题出现的原因.

原因

idea的编码问题

idea的文件编码设置
此处是我们使用idea前, 经常会进行配置的地方, 用于设置文件的编码格式. 这里有一个针对 properties 类型文件的设置, 前一个选项是设置文件的编码格式, 后一个选项用于控制是否将中文自动转为 ascii 编码. 这里重点说一下后面这个选项.

选中该选项后, idea会自动将输入的中文在文件中转存为ascii编码, 同时, idea加载时, 会将其加载为中文进行展示.

因此, 有了其他博客说的情况: 如果合作项目中, 有人选择了该选项, 该文件的中文, 则全部变成了ansii编码, 其他人拉代码下来看的时候, 如果没有勾选该选项, 则会看到ansii编码, 也就是个别老哥认为的乱码问题, 这个时候, 有的博主就会推荐, 勾选上这个选项, 那么问题也就算解决了
但是这个问题的解决, 仅仅是idea中使用时解决, 使用其他文件编辑器打开的时候, 还是会看到ansii编码, 无法看到中文.

使用流读取properties文件

按照上述所说的方法, 勾选该选项后, 由上述分析, 应该很容易发现, 此时读取properties文件, 会读取到ansii编码的文字, 这个原因很好理解, 因为此时文件中存储的中文, 本就时ansii编码的文字

如何使用Properties读取utf-8编码的文件

综上, properties文件常常作为配置文件, 我个人还是比较喜欢配置properties文件为utf8编码的文件, 方便自己随时使用其他简单的文件编辑器查看注释

但是, 在实际使用的时候, 你又会理解, 为什么 idea 会针对 properties 文件, 提供这么一个特别配置. 因为, 你如果是 utf8 格式的文件, 直接使用 Properties 工具类, 读取配置, 会发现中文乱码, 当然, 你没有中文配置的话, 那当然是万事大吉.

为什么Properties无法正常读取utf8编码的文件

以下代码, 没有任何技术含量, 只是说明一下Properties的编码格式指定位置, 可以跳过不看

// 首先是Properties初始化入口
public synchronized void load(InputStream inStream) throws IOException {
   load0(new LineReader(inStream));
}

// ... 其他方法

private void load0 (LineReader lr) throws IOException {
	// ...其他语句
	// 此处初始化下方获取key, value使用的 lr.lineBuf
	while ((limit = lr.readLine()) >= 0) {
		// ...其他语句
		String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf);
		String value = loadConvert(lr.lineBuf, valueStart, limit - valueStart, convtBuf);
	}
	// ...
}

// Properties 有一个内部类 LineReader
class LineReader{
	char[] lineBuf = new char[1024];
	InputStream inStream;
	// 其他属性...
	public LineReader(InputStream inStream) {
      this.inStream = inStream;
      inByteBuf = new byte[8192];
   	}
  
  // 初始化的时候
  int readLine() throws IOException {
  	// ...
  	char c = 0;
  	// ...
  	if (inStream != null) {
  		//The line below is equivalent to calling a
  		//ISO8859-1 decoder.
  		c = (char) (0xff & inByteBuf[inOff++]);
  	} else {
  		c = inCharBuf[inOff++];
  	}
  	// ...
  	lineBuf[len++] = c;
  }
}
读取utf8编码文件的数据
// 直接转码拿
new String(properties.getProperty("name").getBytes("ISO8859-1"), "UTF-8")

总结

至此, 相信相关的properties乱码问题和idea如何配置的问题, 都应该心中大致有了一个了解, 最终, 如何选择, 还是在于个人如何决策.

我个人是这样思考的, 实际使用中, 使用中文作为参数的情况其实很少, 如果个别需要完全可以自己转ansii编码, 但是注释就不一样了, 而且, 学习的过程中, 单独查看properties配置文件是常有的事, 因此, 我更喜欢使用 utf8 编码的配置文件, 即取消勾选idea的那处配置.

还是老话, 取舍看个人. 不强迫自己 标新立异, 也不强迫自己 随大流, 怎么舒服怎么来.

ps:

  1. csdn代码编写排版识别, 不太好使.
  2. utf8编码这么好使, 为什么不统一 一下
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

properties文件的编码问题 的相关文章

  • Java将字符串解析为double

    如何解析字符串中的这个 Double 00034800 变成 Double 值 最后两位数字实际上是小数点 所以我正在寻找的结果是348 00 是否有这样的格式可以与十进制格式一起使用 Well String s 00034800 doub
  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • 如何以编程方式使用包含多列的 where-in 子句执行 PostgreSQL 查询?

    我的查询是这样的 select from plat customs complex where code t code s in 01013090 10 01029010 90 它在 psql 控制台中运行良好 我的问题是如何在客户端代码中
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • 如何使用 Java 引用释放 Java Unsafe 内存?

    Java Unsafe 类允许您按如下方式为对象分配内存 但是使用此方法在完成后如何释放分配的内存 因为它不提供内存地址 Field f Unsafe class getDeclaredField theUnsafe Internal re
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • 如何使用双重调度来分析图形基元的交集?

    我正在分析图形基元 矩形 直线 圆形等 的交互并计算重叠 相对方向 合并等 这被引用为双重调度的一个主要示例 例如维基百科 http en wikipedia org wiki Double dispatch 自适应碰撞算法通常要求 不同的
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Azure Java SDK:ServiceException:ForbiddenError:

    尝试了基本位置检索器代码 如下所示 String uri https management core windows net String subscriptionId XXXXXXXX 5fad XXXXXX 9dfa XXXXXX St
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐

  • 数据预测之BP神经网络具体应用以及matlab代码(转)

    1 具体应用实例 根据表2 预测序号15的跳高成绩 表2 国内男子跳高运动员各项素质指标 序号 跳高成绩 30行进跑 s 立定三级跳远 助跑摸高 助跑4 6步跳高 负重深蹲杠铃 杠铃半蹲系数 100 s 抓举 1 2 24 3 2 9 6
  • 优先队列(堆)

    设计一个程序模仿操作系统的进程管理问题 进 程服务按优先级高的先服务 同优先级的先到先服务的管理 原则 设文件task txt中存放了仿真进程服务请求 其中第 一列是进程任务号 第二列是进程的优先级 1 30 2 20 3 40 4 20
  • React 与Spring Json通信

    前端 post方法 对应post请求 param String url 请求的url地址 param Object params 请求时携带的参数 param Boolean json true json格式请求头 false FormDa
  • Nothing to be done for `install-exec-am' while compile zabbix

    编译zabbix报错 make 3 Leaving directory home sysadmin zabbix zabbix 1 8 src libs zbxjson make 3 Entering directory home sysa
  • 利用scrapy框架进行数据的爬取

    首先介绍一下什么是scrapy框架 爬虫中封装好的一个明星框架 代表性功能 高性能的持久化存储 异步的数据下载 高性能的数据解析 分布式 Scrapy是一个为了爬取网站数据 提取结构性数据而编写的应用框架 非常出名 非常强悍 其内部已经被集
  • 《UE4开发笔记》Tip 0 Rider的五个必备技巧

    在UE4的C 工程和源码开发中 过去常使用Visual Studio系列来作为IDE 但VS始终对UE4工程支持的并不友好 小番茄Visual Assist X系列插件的安装也是十分玄学 时不时就失灵 JetBrains推出了Rider F
  • Selenium WebDriver使用IE浏览器

    IEdriver插件下载地址 http www cr173 com soft 195732 html 1 配置系统环境变量 我的电脑 右键 属性 高级系统设置 环境变量 系统变量 path 注 先把IEDriverServer exe放在C
  • HTML <title> 标签

    实例 一个简单的 HTML 文档 带有尽可能少的必需的标签 The content of the document 定义和用法
  • Elasticsearch概述和DSL查询总结

    目录 Elasticsearch概述 1 什么是Elasticsearch 2 作用 3 特点 DSL Domain Specifit Language 特定领域语言 概念和作用 查询代码总结 最后附项目准备 1 创建搜索工程 maven工
  • Jmeter Springboot Redisson分布式锁并发订单操作

    Jmeter Springboot Redisson分布式锁并发订单操作 下单 取消单 完成单 加库存 br 涉及知识点 br gt java springboot mybatis开发 br gt redis分布式锁 Redisson客户端
  • Web3 用例全解析:传统品牌加速进入 Web3 的原因?

    Web3 有能力彻底改变品牌和客户相互联系的方式 许多品牌已经在尝试使用 NFT 和元宇宙来提高品牌知名度和消费者忠诚度 这是传统社交媒体和电子商务渠道根本无法做到的 NIKE Panini 和 Vodafone nbsp 是最早认识到 N
  • sql2005中的简单分页方法

    select top 10 from select top 30 ROW NUMBER over order by readerid desc as rows1 from reader as a1 where rows1 gt 21 转载于
  • 教育服务机器人总结

    现在有种新名词 用机器人来服务教育 顾名思义 指的是在人工智能领域 机器人助力中小学学生各课程从研究到开展授课过程 其中需要老师在教学环节中的集体辅助 格物斯坦表示 机器人全面帮助教育业完传道授业解课的作用 是功不可没的 随着市场需求具体化
  • K8S管理系统项目实战[API开发]-2

    后端 go gin 后端代码地址GitHub yunixiangfeng k8s platform K8s管理系统后端 go gin kubernetes v1 24 2 golang v1 18 3 5 存储与配置 5 1 ConfigM
  • catalina.home和catalina.base

    Tomcat目录结构如下 bin 运行脚本 conf 配置文件 lib 核心库文件 logs 日志目录 temp 临时目录 webapps 自动装载的应用程序的目录 work JVM临时文件目录 java io tmpdir 其中只有bin
  • 蓝桥杯Python初级组测试题之Turtle画图

    蓝桥杯Python初级测试题之Turtle画图 写这个主要是为了辅助和讲解过蓝桥杯的初级测试 难度并不高 重点在于解析过程 画圆形和以及菱形阵列 思路 第1步 设置整体参数 如循环画菱形的次数为n 12 每次旋转的角度angle 第2步 设
  • 【Spring Security】springboot + mybatis-plus + mysql 从数据库读取用户信息验证登录

    目录 前言 配置 数据库 编码 启动类 dao entity controller dao mapper service config 运行 参考 前言 实现spring security 从数据库读取用户信息验证登录 仅仅能用 不含前端
  • [机缘参悟-92]:《天道》之人生的五种思维觉醒

    目录 前言 一 本质思维 化繁为简 二 成长思维 自我迭代 三 矛盾思维 知己知彼 四 创新思维 见路不走 五 系统思维 顺应天道 前言 一个人的没一次觉醒 是一种发自内心的恍然大悟 醍醐灌顶 遮盖心灵的那层迷雾瞬间消失 豁然开朗的感觉 一
  • 智能遥测终端普适型RTU的主要功能特点及应用

    智能遥测终端机是普适型RTU 研发的融合4G Bluetooth 串口等多种通 信方式 数据采集存储传输于一体的智能遥测终端 产品内置数据采集器 实现内部模数转换 提供增量式雨量接口 RS232 RS485 采集 存储 数据处理 远程传输为
  • properties文件的编码问题

    properties文件的编码问题 背景 原因 idea的编码问题 使用流读取properties文件 如何使用Properties读取utf 8编码的文件 为什么Properties无法正常读取utf8编码的文件 读取utf8编码文件的数