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

BufferedWriter无UTF-8支持致西里尔文及特殊字符写入乱码问题

解决BufferedWriter写入西里尔文及特殊拉丁符号乱码问题

问题核心是FileWriter默认采用系统平台编码,而非你需要的UTF-8,导致西里尔文、ą/ł/ó/ę这类特殊符号写入时被错误编码,读取时用UTF-8解析就出现乱码。

修复方案:替换FileWriter为OutputStreamWriter(指定UTF-8编码)

FileWriter不支持显式指定编码,改用OutputStreamWriter结合FileOutputStream,强制以UTF-8编码写入,就能保证所有特殊符号正常存储。

修正后的完整写入代码:

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class FileWriterFix {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in, StandardCharsets.UTF_8);
        
        // 用OutputStreamWriter指定UTF-8编码,追加模式通过FileOutputStream的第二个参数true开启
        try (BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(
                        new FileOutputStream("C:\\Users\\ouzhi\\OneDrive\\Документы\\cardsLibrary\\input.txt", true),
                        StandardCharsets.UTF_8))) {
            
            while (true) {
                System.out.print("Import a line to write: ");
                String userInput = sc.nextLine().toLowerCase();
                if (userInput.equals("stop")) {
                    break;
                }
                String[] words = userInput.split(" ");
                if (words.length >= 3 || words.length == 1) {
                    System.out.println("Please,enter two words");
                    continue;
                } else {
                    writer.write(userInput);
                    writer.newLine();
                    writer.flush();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sc.close();
        }
    }
}

关键说明:

  • 用try-with-resources语法(Java 7+支持),无需手动关闭流,自动处理资源释放,避免内存泄漏。
  • 你的读取代码已经采用了正确方式:InputStreamReader指定StandardCharsets.UTF_8,保持读写编码一致即可正常解析文件内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:10:37