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

读取UTF-8属性文件转TXT时德语变音字符异常问题

解决德语变音字符读取乱码问题

嗨Pascal,我来帮你搞定这个Ä、Ü、Ö等变音字符的乱码问题!

问题根源

你代码里的FileReader会使用操作系统默认编码来读取文件,而你的properties文件大概率是UTF-8编码(或者和系统默认编码不匹配),这就导致读取变音字符时已经被错误解码了——后续再用UTF-8写入也没法恢复正确的字符,和ArrayList缓存完全没关系,问题出在读取环节的编码不匹配。

修改后的代码

这里给你调整好的代码,用InputStreamReader明确指定读取编码,同时用try-with-resources自动管理资源,更安全简洁:

private static void createTxt(String filePath, String savePath) throws IOException {
    final File file = new File(filePath);
    // 明确指定UTF-8编码读取文件,替换原FileReader
    try (BufferedReader bReader = new BufferedReader(
             new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));
         // try-with-resources自动关闭Writer,不用手动写finally
         Writer out = new BufferedWriter(
             new OutputStreamWriter(new FileOutputStream(savePath), StandardCharsets.UTF_8))) {

        String line = bReader.readLine();
        while (line != null) {
            out.write(line + "\n");
            line = bReader.readLine();
        }
    }
}

关键改动说明

  • 读取编码指定:把FileReader换成InputStreamReader + FileInputStream,并通过StandardCharsets.UTF_8明确指定读取编码,确保和你的properties文件编码一致(如果文件实际是ISO-8859-1编码,就改成StandardCharsets.ISO_8859_1)。
  • 自动资源管理:使用try-with-resources语法,Java会在代码块结束后自动关闭BufferedReader和Writer,避免手动关闭可能出现的资源泄漏。
  • 去掉冗余缓存:直接边读边写,不需要先把所有行存到ArrayList里,节省内存,尤其是处理大文件时更高效。

额外提示

如果不确定properties文件的实际编码,可以用文本编辑器(比如Notepad++)打开文件,查看它的编码格式,再对应调整代码里的读取编码参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:57:53