UTF-8 から ISO-8859-1 へのエンコーディング変換の課題を解決する
異なるエンコーディング間での文字列の変換は、特に非 ASCII 文字が含まれる場合に困難が生じることがよくあります。 よくある問題は、UTF-8 から ISO-8859-1 (Latin-1) への変換です。 誤った変換により、「ÄäÖöÕõÜü」が「Ã?äÃ?öÃ?ÃμÃ?Ã⁄」のようなものに変換される可能性があります。
これは、ISO-8859-1 が固定シングルバイト エンコーディングであるのに対し、UTF-8 は可変長エンコーディングを使用するために発生します。 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 中国語 Web サイトの他の関連記事を参照してください。