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

如何将Java ASCII属性文件转换为Java 9 UTF-8格式属性文件

解决ASCII Java属性文件转Java 9 UTF-8格式问题

核心需求:将包含Unicode转义(如\u00E4)的ASCII编码Java属性文件,转换为Java 9支持的UTF-8格式属性文件。要求保留\r、\n等控制字符的转义形式,仅将非控制类Unicode转义转换为对应的UTF-8字符,以简化翻译协作流程。

方法1:原生Java代码实现(最可靠)

Java的Properties类原生支持属性文件的解析与生成,能精准匹配需求中的转义规则,无需依赖第三方工具。

转换代码

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Properties;

public class PropConverter {
    public static void main(String[] args) throws IOException {
        if (args.length != 2) {
            System.err.println("用法: java PropConverter <输入ASCII属性文件路径> <输出UTF-8属性文件路径>");
            System.exit(1);
        }

        // 读取ASCII属性文件(Java默认以ISO-8859-1编码读取,兼容ASCII)
        Properties props = new Properties();
        try (InputStream in = new FileInputStream(args[0])) {
            props.load(in);
        }

        // 写入UTF-8格式属性文件
        try (OutputStream out = new FileOutputStream(args[1]);
             Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8)) {
            // store方法会自动将控制字符转为\r、\n转义,非控制Unicode字符直接以UTF-8写入
            props.store(writer, "Converted to UTF-8 (Java 9 compatible)");
        }
    }
}

运行步骤

# 编译代码(Java 6+即可运行,输出文件兼容Java 9+ UTF-8属性文件规范)
javac PropConverter.java
# 执行转换
java PropConverter input.properties output_utf8.properties

原理说明

  • Properties.load():解析ASCII文件中的\uXXXX转义为对应Unicode字符,同时将\r、\n等控制字符转义解析为实际控制字符。
  • Properties.store():写入时将实际控制字符重新转为\r、\n转义形式,非控制类Unicode字符直接以UTF-8编码写入(不再生成\uXXXX转义),完全符合需求。

方法2:使用Apache Commons Configuration库

若不想编写原生Java代码,可借助Apache Commons Configuration库处理属性文件的编码与转义规则。

依赖引入(Maven)

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-configuration2</artifactId>
    <version>2.8.0</version>
</dependency>

转换代码

import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.io.FileHandler;
import java.io.File;
import java.nio.charset.StandardCharsets;

public class CommonsPropConverter {
    public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            System.err.println("用法: java CommonsPropConverter <输入文件路径> <输出文件路径>");
            System.exit(1);
        }

        PropertiesConfiguration config = new PropertiesConfiguration();
        FileHandler handler = new FileHandler(config);
        
        // 以ASCII兼容的ISO-8859-1编码读取输入文件
        handler.setEncoding(StandardCharsets.ISO_8859_1.name());
        handler.load(new File(args[0]));

        // 以UTF-8编码写入输出文件,禁用Unicode转义
        handler.setEncoding(StandardCharsets.UTF_8.name());
        handler.setEscapeUnicode(false);
        handler.save(new File(args[1]));
    }
}

为何iconv/uconv无法满足需求

这类通用编码转换工具仅处理字节层面的编码转换,不理解Java属性文件特有的\uXXXX转义规则,无法将转义序列解析为实际Unicode字符,因此无法实现需求中的转换逻辑。必须使用了解Java属性文件格式的工具或代码来处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:15:01