当前位置: 首页 > 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编码了,此时可以正常解析中文。

相关文章:

  • HarmonyOS 鸿蒙 ArkTS ArkUI 页面之间切换转换动画设置
  • 微服务OAuth 2.1认证授权可行性方案(Spring Security 6)
  • [嵌入式系统-14]:常见实时嵌入式操作系统比较:RT-Thread、uC/OS-II和FreeRTOS、Linux
  • uniapp的配置和使用
  • flask+python儿童福利院管理系统pycharm毕业设计项目
  • C++ 关键字小结
  • 使用 Elasticsearch 和 OpenAI 构建生成式 AI 应用程序
  • Java+SpringBoot构建智能捐赠管理平台
  • re:从0开始的CSS之旅 13. 文档流
  • 第十九篇【传奇开心果系列】Python的OpenCV库技术点案例示例:文字识别与OCR
  • 服务器安装Docker (centOS)
  • 《走进科学》灵异事件:Nginx配置改了之后一直报错
  • RabbitMQ交换机
  • 融资项目——获取树形结构的数据
  • MyBatis之Like模糊查询的两种实现方式
  • A股上市以来涨幅排行榜
  • 2024刘谦春晚第二个扑克牌魔术
  • [Python进阶] 识别验证码
  • tkinter-TinUI-xml实战(10)展示画廊
  • 第三百一十回
  • 国家卫健委对近日肖某引发舆情问题开展调查
  • 过去24小时中美是否就关税问题进行过接触?外交部:没有
  • 五一假期上海推出首批16条“市民健康路线”,这些健康提示请收好
  • 西班牙葡萄牙突发全国大停电,欧洲近年来最严重停电事故何以酿成
  • 特朗普的百日执政支持率与他“一税解千愁”的世界观和方法论
  • 程璧“自由生长”,刘卓辉“被旋律牵着走”