首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# RichTextBox 載入 XML 保存後亂碼/格式錯亂?編碼與流處理正確姿勢

     編輯:程式設計綜合問答

現象描述

將 XML 文件內容載入 RichTextBox 編輯後保存,用記事本打開格式錯亂,用寫字板打開顯示亂碼。

根本原因

  1. 編碼不匹配:StreamWriter 默認 UTF-8,而 XML 可能聲明 encoding="gb2312",直接寫入導致解析錯誤。
  2. RichTextBox 內容獲取方式錯誤:TextRange.Text 返回純文本,丟失 RTF 格式;若原文件為 RTF 則需用 TextRange.Save。
  3. 未保留 XML 聲明與縮進:手動拼接字符串易遺漏 和換行縮進。

正確保存代碼

private void btnSave_Click(object sender, RoutedEventArgs e) {
    // 1. 讀取原文件編碼(可簡化為強制 UTF-8 無 BOM)
    var encoding = new UTF8Encoding(false); // 無 BOM

    // 2. 獲取 RichTextBox 完整文本(含換行)
    TextRange range = new TextRange(richTextBox1.Document.ContentStart,
                                    richTextBox1.Document.ContentEnd);
    string content = range.Text;

    // 3. 寫入文件
    using (var sw = new StreamWriter(filePath, false, encoding)) {
        sw.Write(content);
    }
}

進階:保留 XML 格式化(自動縮進)

using System.Xml;
using System.Xml.Linq;

private void SaveFormattedXml(string filePath, string rawXml) {
    XDocument doc = XDocument.Parse(rawXml, LoadOptions.PreserveWhitespace);
    // 或 LoadOptions.SetLineInfo 保留行號
    var settings = new XmlWriterSettings {
        Encoding = new UTF8Encoding(false),
        Indent = true,
        IndentChars = "  ",
        NewLineChars = "\n",
        OmitXmlDeclaration = false
    };
    using (var writer = XmlWriter.Create(filePath, settings)) {
        doc.Save(writer);
    }
}

最佳實踐清單

  • 統一項目編碼為 UTF-8 無 BOM,避免跨平台亂碼。
  • XML 配置文件嚴禁手動拼接,務必用 XDocument/XmlDocument 構建與保存。
  • RichTextBox 僅用於富文本編輯(RTF/HTML),純文本/XML/JSON 請用 TextBox + XDocument 分離關注點。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved