資料與電子表格 · CSV 更清理
UTF-8 和 Windows-1252 如何感到困惑:修復 Mojibake CSV 匯出
· 工作原理
csv 編碼 資料清理
當“José”變成“José”時,位元組沒問題,但解釋是錯誤的。這篇文章解釋了兩種最常見的編碼如何衝突、如何識別症狀以及如何重新解碼修復它們。
重音名稱和大引號變成了符號湯 - UTF-8 檔案的洩漏模式讀作 Windows-1252,反之亦然
載入後成為替換鑽石的客戶名稱並不能證明 CSV Cleaner 偵測到錯誤的舊代碼頁。配置的說法相反:僅理解 UTF-8,而 Windows-1252 或 Shift-JIS 檔案被讀取為 UTF-8。因此,在 CSV 解析器看到字元之前,無效的位元組序列就已經被取代。
大綱以熟悉的 mojibake(如 José)為中心,但瀏覽器讀取路徑使用 `File.text()` 並不提供編碼選擇器。本文糾正了這項承諾。該工具中可操作的症狀是替換字元或以其他方式損壞的文字,並保留原始檔案位元組以便在其他地方恢復。
非 UTF-8 檔案作為替換字元到達此工具,而不是經過驗證的 mojibake 模式
分隔檔案是磁碟上的位元組,而解析器則對 JavaScript 字串進行操作。編碼定義了這些層之間的映射。 CSV 語法命名逗號、引號和記錄邊界,但沒有可靠的磁碟宣告告訴 `File.text()` 哪個舊映射建立了每個非 ASCII 位元組。
一旦解碼產生 U+FFFD 替換字符,後面的 CSV 操作就會將這些佔位符作為普通文字接收。修剪或匯出無法推斷哪個原始位元組序列或字元屬於那裡。這就是為什麼未觸及的來源比從損壞的顯示器中組裝的查找和替換清單更重要。
兩個常見的嫌疑犯 — UTF-8 的多位元組序列和 Windows-1252 的單字節,以及為什麼它們在交換時會產生可預測的垃圾
UTF-8 表示具有多位元組序列的非 ASCII 字元。 Windows-1252 將許多西方字元指派給各個位元組值。閱讀另一種約定的約定可能會失敗或產生誤導性文字,但此路線不會測試替代解碼器、對合理的語言進行評分或提供 Windows-1252 選擇。
唯一特定於編碼的解析器行為是在文字解碼後刪除前導 U+FEFF UTF-8 位元組順序標記。這可以防止標記加入第一個標頭。它不是一般的編碼檢測,並不提供對 Shift-JIS、UTF-16 或實作中未提及的區域代碼頁的支援。
ToolAcre 接受 UTF-8 文字,並不比較 Windows-1252 候選者
替換字元表示文字解碼器無法在其選擇的解釋下映射某些輸入位元組。問號可能是由先前的有損匯出插入的,在這種情況下,原始字元可能已經不可用。可識別的 à 序列可能會出現在其他工作流程中,但此頁面不會診斷其歷史記錄。
不要只從一個姓氏來決定來源編碼。檢查匯出應用程式的設定、檔案來源和位元組感知檢查器,使來源保持不變。清理器的行警告涉及引用閉合和列寬度;它們並不是字元編碼正確的證據。
重新解碼,而不是尋找和替換 - 為什麼修復方法是使用正確的編碼讀取字節並寫入 UTF-8,而不是一一修補字符
可靠的修復是傳回原始位元組並使用記錄的來源編碼對其進行一次解碼,然後寫入 UTF-8。此操作必須在透過僅限 UTF-8 的文字路徑開啟之前進行。解碼後替換可見的垃圾片段可能會破壞合法的出現,並無法區分折疊為一個佔位符的多個原始字元。
CSV Cleaner 沒有位元組級重新解碼控制,因此它無法執行輪廓所承諾的轉換。使用可信任的來源感知轉換方法,將代表性名稱與來源系統進行比較,然後將 UTF-8 結果帶至此處以進行分隔符號、引用、空格和重複工作。
從此工具外部恢復原始位元組;此處的字元替換無法恢復它們
為了安全演示,請建立一個包含一個重音名稱的小型舊編碼檔案並保留一個十六進位副本。載入到工具中,觀察是否出現替換字元。這個觀察建立了 UTF-8 邊界;它不會僅僅因為預期的名稱已知而建立原始代碼頁。
接下來使用 ToolAcre 外部明確選擇的解碼器轉換未觸及的字節,保存 UTF-8 並載入該結果。現在,名稱應該完好無損地到達,而 CSV 解析器正常處理分隔符號。比較這兩條路徑可以提供正確的教訓,而無需聲稱清理工自己執行了恢復。
工作範例:示範 UTF-8 邊界,無需宣告不受支援的修復
雙編碼檔案可能需要重建早期的轉換,如果沒有其他來源,已經用文字問號保存的資料可能無法恢復。本文沒有規定通用反轉,因為該實作不包含編碼歷史或位元組保留恢復功能。
它也避免聲稱支援 UTF-16、東亞編碼或規範化形式。如果這些很重要,請選擇一個能夠命名並測試它們的轉換器。成功的 CSV 解析僅證明分隔符號狀態機找到了行;它沒有說明該階段之前的字元解碼是否忠實。
修復一次解釋 — ToolAcre CSV Cleaner 的編碼修復如何在裝置上重新解碼和重新編碼匯出
ToolAcre 可以剝離前導 UTF-8 BOM,並透過瀏覽器的下載路徑將結果字串序列化為 UTF-8 CSV。它無法將任意舊位元組轉換為正確的 Unicode,因為在沒有使用者選擇的解碼器的情況下,這些位元組已經跨越了瀏覽器的固定文字讀取邊界。
將替換標記視為停止訊號。保留原始碼,從生產者識別其編碼,使用適當的位元組感知工具轉換一次,並驗證重要名稱。只有這樣才能使用 CSV Cleaner 來完成其配置實際承諾的結構作業。