首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 讀寫 TXT 文件避免中文亂碼的完整指南

     編輯:Java 相關知識

亂碼根因分析

Java 讀寫包含中文的文本文件時出現亂碼,核心原因是系統預設編碼與程式指定編碼不一致:

  • Windows 系統預設編碼通常為 GBK(含 GB2312)
  • IDE / JVM 預設編碼多為 UTF-8
  • 手工創建的文件若為 GBK,程式以 UTF-8 讀取即產生亂碼

解決方案:顯式指定編碼

在所有讀寫操作中明確指定編碼格式,推薦統一使用 UTF-8 或根據業務需求指定 GBK。

寫入文件範例

public static void writeFile(String fileName, String fileContent) {
    try {
        File file = new File(fileName);
        if (!file.exists()) {
            file.createNewFile();
        }
        // 關鍵:OutputStreamWriter 指定編碼
        OutputStreamWriter writer = new OutputStreamWriter(
            new FileOutputStream(file), "UTF-8");
        BufferedWriter bufferedWriter = new BufferedWriter(writer);
        bufferedWriter.write(fileContent);
        bufferedWriter.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

讀取文件範例

public static String readFile(String fileName) {
    StringBuilder content = new StringBuilder();
    try {
        File file = new File(fileName);
        if (file.isFile() && file.exists()) {
            // 關鍵:InputStreamReader 指定編碼
            InputStreamReader reader = new InputStreamReader(
                new FileInputStream(file), "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(reader);
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line).append(System.lineSeparator());
            }
            reader.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return content.toString();
}

進階建議

  • 統一專案編碼:在 IDE、建構工具、JVM 參數中統一設定 UTF-8(-Dfile.encoding=UTF-8)。
  • 使用 NIO.2:Java 7+ 可用 Files.readAllLines(path, StandardCharsets.UTF_8) 簡化代碼。
  • 避免使用 FileReader/FileWriter:它們不支援指定編碼,依賴平台預設值,跨平台風險高。

常見編碼對照表

編碼適用場景備註
UTF-8國際化專案、現代應用推薦預設選擇
GBK/GB2312中國大陸舊系統相容僅支援中文字符
Big5繁體中文舊系統台灣/香港常用

總結

中文亂碼本質是編碼不匹配。養成「讀寫必指定編碼」的習慣,配合專案級統一編碼設定,可從根源消除此類問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved