You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Spring Boot与Angular应用中£符号前出现的Â编码异常问题

修复UTF-8文件读取导致的£乱码问题

我来帮你拆解这个问题——核心问题出在读取文件时的编码不匹配,和写入环节、数据库本身关系不大。

问题根源分析

你写入文件时的操作是正确的:用Java 11的FileWriter显式指定了StandardCharsets.UTF_8编码,所以文件本身是标准的UTF-8格式,记事本能正常显示就是证明。

但读取环节踩了FileReader的坑:这个类在Java 8(甚至直到Java 11)都没有提供指定编码的构造函数,它默认会使用系统平台的默认字符编码(比如Windows上可能是GBK,Linux上可能是ISO-8859-1)。当UTF-8编码的£(二进制为0xC2 0xA3)被非UTF-8编码读取时,会被拆成两个独立字符:Â(对应0xC2)和£(对应0xA3),这就是你看到£100的原因。

修复方案

把FileReader换成InputStreamReader并显式指定UTF-8编码,确保读写编码一致。修改后的读取代码如下:

// Java 8 正确的读取方式
try (InputStreamReader reader = new InputStreamReader(new FileInputStream(queFile), StandardCharsets.UTF_8)) {
    List<QuackDTO> qDTOs = objectMapper.readValue(reader, new TypeReference<List<QuackDTO>>(){});
}

补充说明

  • 你提到的Files.readString(path, StandardCharsets.UTF_8)能正常工作,本质也是因为它显式指定了UTF-8编码,避开了系统默认编码的坑。
  • 数据库环节没问题:你的MySQL用了utf8mb4字符集,乱码在读取到DTO时已经出现,和数据库无关。
  • 建议养成习惯:只要处理包含非ASCII字符的文件读写,都要显式指定编码,不要依赖系统默认编码,避免跨环境或跨平台的乱码问题。

内容的提问来源于stack exchange,提问作者user14734781

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:17:28