读取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
相关产品推荐
相关产品推荐

