C# での UTF-8 から ISO-8859-1 への文字列変換を正しく処理する
UTF-8 文字列を ISO-8859-1 (Latin-1) に直接変換すると、多くの場合、データ損失や文字破損が発生します。 これは、ISO-8859-1 が固定長のシングルバイト エンコーディングであるのに対し、UTF-8 は可変長エンコーディングを使用するためです。 適切なバイト変換を行わずにエンコードを変更するだけでは、不正な出力が発生します。
正確な変換の鍵は、Encoding.Convert
メソッドを使用することにあります。このメソッドは、UTF-8 バイトを ISO-8859-1 の同等のバイトに適切にマップし、必要な変換を処理します。 ISO-8859-1 に存在しない文字は、最良の近似値に置き換えられるか、失われる可能性があります。
修正された C# コードは次のとおりです:
<code class="language-csharp">Encoding iso = Encoding.GetEncoding("ISO-8859-1"); Encoding utf8 = Encoding.UTF8; string utf8String = "ÄäÖöÕõÜü"; // Example UTF-8 string byte[] utf8Bytes = utf8.GetBytes(utf8String); byte[] isoBytes = Encoding.Convert(utf8, iso, utf8Bytes); string iso88591String = iso.GetString(isoBytes);</code>
このコードは、まず元の文字列から UTF-8 バイトを取得します。 次に、Encoding.Convert
はこれらのバイトを ISO-8859-1 に適した表現に変換します。 最後に、結果のバイト配列が ISO-8859-1 エンコーディングを使用してデコードされ、最終的な文字列が生成されます。 ISO-8859-1 文字セット以外の文字は、このプロセス中に失われるか置き換えられる可能性があることに注意してください。
以上がC# で UTF-8 文字列を ISO-8859-1 に正しく変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。