Lösung des UTF-8-zu-ISO-8859-1-Konvertierungsproblems in C#
Beim Konvertieren von UTF-8-Zeichenfolgen in ISO-8859-1 können bei unsachgemäßer Handhabung Ergebnisfehler auftreten. Lassen Sie uns das Problem analysieren und eine Lösung anbieten.
Code und Fragen
Der von Ihnen bereitgestellte Codeausschnitt versucht, UTF-8 mit Encoding.GetString
und Encoding.GetBytes
in ISO-8859-1 zu konvertieren. Für diese spezielle Konvertierung sind jedoch zusätzliche Schritte erforderlich.
Lösung: Verwenden Sie Encoding.Convert
Um das Byte-Array vor der Dekodierung ordnungsgemäß an die Zielkodierung anzupassen, sollte Encoding.Convert
verwendet werden. Das Folgende ist der geänderte Code:
<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>
Erklärung
Encoding.GetEncoding
Ruft den Encoder und Decoder für eine bestimmte Zeichenkodierung ab. Encoding.GetBytes
Kodieren Sie die UTF-8-Quellzeichenfolge in ein Byte-Array. Das direkte Dekodieren dieses Byte-Arrays mit Encoding.GetString
erzeugt jedoch nicht die gewünschte ISO-8859-1-Zeichenfolge.
Encoding.Convert
Passen Sie das Byte-Array an die Zielkodierung an. In diesem Fall werden die Bytes so konvertiert, dass sie der ISO-8859-1-Kodierung entsprechen. Das angepasste Byte-Array kann dann in einen korrekten ISO-8859-1-String dekodiert werden. Encoding.GetString
Ergebnisse
Nachdem Sie diese Änderung angewendet haben, wird Ihre resultierende Zeichenfolge korrekt in ISO-8859-1 konvertiert und ist nicht verstümmelt.Das obige ist der detaillierte Inhalt vonWie konvertiert man UTF-8 in C# korrekt in ISO-8859-1?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!