当前位置: 首页 > news >正文

Spring + Tomcat项目中nacos配置中文乱码问题解决

实际工作的时候碰到了nacos中文乱码的问题,一顿排查最终还是调源码解决了。下面为具体的源码流程,有碰到的可以参考下。

对于nacos配置来说,初始主要源码就在NacosConfigService类中。里面有初始化获取配置content以及设置对应监听器的操作。具体可以参考:详解Nacos 配置中心客户端配置缓存动态更新的源码实现 - 简书

对于监听器,我们可以通过注解@NacosConfigListener去自定义监听器。但我们通@NacosValue注解配置的一些配置能进行动态刷新,就意味着nacos内部肯定有自定义的监听器,也是靠这个监听器进行数据的动态刷新。对应的类为NacosPropertySourcePostProcessor,具体的方法流程图如下:

addListenerIfAutoRefreshed -> receiveConfigInfo -> NacosPropertySource newNacosPropertySource = new NacosPropertySource(dataId, groupId, name, config, type);上述初始化NacosPropertySource 的过程就是导致nacos配置中文乱码的原因
跟进初始化方法如下:
public NacosPropertySource(String dataId, String groupId, String name,String nacosConfig, String type) {super(name, toProperties(dataId, groupId, nacosConfig, type));this.type = type;
}toProperties(dataId, groupId, nacosConfig, type) -> ConfigParseUtils.toProperties(dataId, group, text, type) -> toProperties(context, type) -> configParse.parse(context) 其中configParse为DefaultPropertiesConfigParse -> loader.load() -> load(true) -> OriginTrackedPropertiesLoader.CharacterReader reader = new OriginTrackedPropertiesLoader.CharacterReader(this.resource);

而其中异常原因就在new OriginTrackedPropertiesLoader.CharacterReader( this.resource) 这行代码中,点进去代码如下,其中编码格式为ISO_8859_1。导致中文解析就乱码。

我测试的nacos-spring-text版本如下,为1.0.0版本。在maven仓库中,这个版本显示是2020年发布的。

我尝试将nacos-spring-text版本更换为1.1.0后,可以看到在DefaultPropertiesConfigParse类中,CharacterReader类初始化后已经换成了StandardCharsets.UTF_8编码了,此时可以正常解析中文。

http://www.lryc.cn/news/300001.html

相关文章:

  • Unity SRP 管线【第十讲:SRP/URP 图形API】
  • 使用playwright进行自动化端到端测试
  • ES实战-相关性搜索
  • MQTT的学习与应用
  • 编译原理实验1——词法分析(python实现)
  • C语言——oj刷题——模拟实现库函数strlen
  • 对进程与线程的理解
  • 「数据结构」线性表
  • GEE:关于在GEE平台上进行回归计算的若干问题
  • Vivado -RAM
  • 备战蓝桥杯---图论之最短路dijkstra算法
  • C#系列-C#实现秒杀功能(14)
  • Java ‘Elasticsearch‘ 操作
  • 【AI视野·今日NLP 自然语言处理论文速览 第七十八期】Wed, 17 Jan 2024
  • 实验5-4 使用函数计算两点间的距离
  • 【JavaEE】_JavaScript(Web API)
  • ARM交叉编译搭建SSH
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • 回归预测模型:MATLAB多项式回归
  • 「计算机网络」数据链路层
  • 【Linux】Ubuntu 22.04 升级 nodejs 到 v18
  • 当go get获取不到软件包时
  • 全网最详细解法|同济大学|高等数学|第八版|习题1-5
  • 可视化工具:将多种数据格式转化为交互式图形展示的利器
  • [嵌入式AI从0开始到入土]14_orangepi_aipro小修补含yolov7多线程案例
  • 机器学习、深度学习、强化学习、迁移学习的关联与区别
  • 苹果为什么需要台积电3nm工艺芯片?
  • 力扣:53. 最大子数组和
  • 幻兽帕鲁Palworld专用服务器CPU内存配置怎么选择?
  • 学习总结11