解 UTF-8 到 ISO-8859-1 編碼轉換挑戰
在不同編碼之間轉換字串,特別是涉及非 ASCII 字元時,通常會遇到困難。 一個常見問題是從 UTF-8 轉換為 ISO-8859-1 (Latin-1)。 不正確的轉換可能會將“ÄäÖöÕõÜü”轉換為“à?¤à?à¶à?àµà?⁄”之類的內容。
發生這種情況是因為 UTF-8 使用可變長度編碼,而 ISO-8859-1 是固定單字節編碼。 使用 GetString()
等方法直接轉換可能會損壞非 ASCII 字元。
解決方案在於使用Encoding.Convert
方法。這可以正確處理轉換過程:它採用 UTF-8 位元組數組,將其轉換為 ISO-8859-1 位元組數組,然後使用目標編碼對該數組進行解碼。
這是修正後的程式碼片段:
<code class="language-csharp">Encoding iso = Encoding.GetEncoding("ISO-8859-1"); Encoding utf8 = Encoding.UTF8; byte[] utfBytes = utf8.GetBytes(Message); byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes); string msg = iso.GetString(isoBytes);</code>
此方法可確保非 ASCII 字元的準確轉換,從而從範例輸入中產生預期的「ääÖöÕõÜü」輸出。 關鍵是最終解碼之前 Encoding.Convert
提供的中間位元組數組操作。
以上是如何正確地將 UTF-8 轉換為 ISO-8859-1 編碼而不遺失資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!