首頁 >後端開發 >C++ >如何正確地將 UTF-8 轉換為 ISO-8859-1 編碼而不遺失資料?

如何正確地將 UTF-8 轉換為 ISO-8859-1 編碼而不遺失資料?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-08 14:27:41870瀏覽

How Can I Correctly Convert UTF-8 to ISO-8859-1 Encoding Without Data Loss?

解 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn