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

C++ CString 替換 Word 軟回車字元:識別 Unicode 控制字元與正確 Replace

     編輯:程式設計綜合問答

從 Word 讀取文本到 CString 時,軟回車 (Shift+Enter) 會帶入特殊 Unicode 控制字元,顯示為小方框。需識別其編碼值並用 Replace 移除或轉換為硬回車。

識別特殊字元

  1. 在 Visual Studio 偵錯時,將 CString 內容複製到 UltraEdit / Notepad++ / VS 記憶體視窗,查看十六進位碼。
  2. 常見軟回車編碼:
    U+000B (Vertical Tab, \v, 0x0B)
    U+2028 (Line Separator)
    U+2029 (Paragraph Separator)

替換代碼

CString txt = ...; // 從 Word 讀取
// 替換垂直製表符 (最常見)
txt.Replace(_T('\x0B'), _T('\r\n')); // 或 _T('\n')
// 替換行/段分隔符
txt.Replace(_T('\x2028'), _T('\r\n'));
txt.Replace(_T('\x2029'), _T('\r\n'));

// 通用:移除所有非列印字元 (保留 \r\n\t)
CString cleaned;
for (int i = 0; i < txt.GetLength(); ++i) {
    TCHAR ch = txt[i];
    if (ch >= 32 || ch == '\r' || ch == '\n' || ch == '\t')
        cleaned += ch;
    else
        cleaned += _T(' '); // 或忽略
}
txt = cleaned;

進階:構建特定字元字串進行替換

// 若知道確切 Unicode 值
CString vt; vt.AppendChar(0x000B); // 垂直製表符
txt.Replace(vt, _T("\r\n"));

注意事項

  • CString::Replace 區分大小寫,Unicode 字元直接匹配。
  • Word 版本、匯出方式 (複製貼上/COM 自動化/另存為 RTF/HTML) 產生的控制字元可能不同,建議以「檢視十六進位 → 針對性替換」為主。
  • 若使用 MSHTML 或 OpenXML SDK 解析 Word,可在解析階段直接正規化換行。

掌握 Unicode 控制字元識別與 CString 替換技巧,能徹底解決 Word 文本匯入髒字元問題。

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