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

Java生成XML中£符号在Notepad++显示为xA3的解决咨询

问题:英镑符号£在Notepad++中显示为xA3的解决方法

问题描述

我用Java代码生成XML文件,其中英镑符号£在记事本(Notepad)显示正常,但在Notepad++里显示为xA3。XML文件声明编码是UTF-8,把显示异常的xA3复制粘贴回同一文件后又能正常显示。本地运行正常,但部署环境出现该问题,且两台服务器默认编码一致。

异常符号展示

XML示例代码

<?xml version="1.0" encoding="UTF-8"?>
<DataExtract xmlns:vltrdr="........." xsi:schemaLocation="D:\Apps\Test\schema/Test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
<header>
  <creationDateTime>2024-04-10T06:47:15</creationDateTime>
  <reference>A_20240410064715</reference>
</header>
<letters>
<letter>
        <reportingCurrency>GBP</reportingCurrency>
        <reportingCurrencySymbol>GB£</reportingCurrencySymbol>
  </letter>
</letters>

</DataExtract>

代码细节

  • 使用Groovy的Markup Builder生成文件内容,未通过Markup Builder显式添加XML声明,而是手动在内容头部添加了<?xml version="1.0" encoding="UTF-8"?>
  • 文件写入代码:
Path path = Paths.get(fileNameWithExtn);
Files.write(path, xmlStr.getBytes());

核心原因

问题出在文件实际编码和XML声明的编码不匹配:你手动声明了UTF-8,但xmlStr.getBytes()会使用JVM默认编码(部署环境可能不是UTF-8),导致英镑符号被按其他编码(比如ISO-8859-1)写入,而Notepad++按UTF-8解析时,就会把ISO-8859-1编码的0xA3显示成乱码字符串xA3。

解决步骤

  1. 指定UTF-8编码写入文件
    替换文件写入代码,显式指定UTF-8编码,确保文件实际保存为UTF-8格式:

    import java.nio.charset.StandardCharsets;
    
    Path path = Paths.get(fileNameWithExtn);
    Files.write(path, xmlStr.getBytes(StandardCharsets.UTF_8));
    

    或更简洁的写法:

    Files.write(path, xmlStr, StandardCharsets.UTF_8);
    
  2. 让Groovy Markup Builder自动生成XML声明
    不要手动添加XML声明,配置Markup Builder自动生成带UTF-8编码的声明,避免手动声明和实际编码不一致:

    def writer = new StringWriter()
    def xmlBuilder = new groovy.xml.MarkupBuilder(writer)
    // 自动生成符合标准的XML编码声明
    xmlBuilder.mkp.xmlDeclaration(version: '1.0', encoding: 'UTF-8')
    // 后续构建XML内容...
    def xmlStr = writer.toString()
    
  3. 验证Notepad++的编码识别
    打开文件后,在Notepad++顶部菜单选择「编码」→「UTF-8」(无需BOM,XML标准不推荐UTF-8 BOM);如果文件被错误识别为其他编码,可通过「编码」→「转换为UTF-8」重新保存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:02:21