Ich habe zu diesem Thema gegoogelt und mir jede Antwort angesehen, aber ich verstehe sie immer noch nicht.
Grundsätzlich muss ich eine UTF-8-Zeichenfolge in ISO-8859-1 konvertieren und dies mit folgendem Code tun:
Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
string msg = iso.GetString(utf8.GetBytes(Message));
Meine Quellzeichenfolge ist
Message = "ÄäÖöÕõÜü"
Aber leider wird meine Ergebniszeichenfolge
msg = "�ä�ö�õ�ü
Was mache ich hier falsch?
Encoding.Unicode
und in der Win32-API falsch angewendet . Unicode ist ein Zeichensatz, keine Codierung. UTF-16 ist eine von mehreren Codierungen für Unicode.)Message
es von UTF-8 dekodiert wurde. Vorausgesetzt, dieser Teil hat korrekt funktioniert, ist die Konvertierung in Latin-1 so einfach wiebyte[] bytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(Message)
. Dann können Sie, wie StuS sagt, die Latin-1-Bytes mitEncoding.GetEncoding("ISO-8859-1").GetString(bytes)
Antworten:
Verwenden Sie Encoding.Convert , um das Byte-Array anzupassen, bevor Sie versuchen, es in Ihre Zielcodierung zu dekodieren.
quelle
Encoding.GetEncoding("ISO-8859-1").GetString(Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("ISO-8859-1"), Encoding.UTF8.GetBytes(myString)))
Ich denke, Ihr Problem ist, dass Sie davon ausgehen, dass die Bytes, die die utf8-Zeichenfolge darstellen, dieselbe Interpretation ergeben, wenn sie als etwas anderes interpretiert werden (iso-8859-1). Und das ist einfach nicht der Fall. Ich empfehle Ihnen, diesen ausgezeichneten Artikel von Joel Spolsky zu lesen.
quelle
Versuche dies:
quelle
Sie müssen zuerst die Quelle der Zeichenfolge korrigieren.
Eine Zeichenfolge in .NET ist eigentlich nur ein Array von 16-Bit-Unicode-Codepunkten, Zeichen, sodass eine Zeichenfolge keine bestimmte Codierung aufweist.
Wenn Sie diese Zeichenfolge nehmen und in eine Reihe von Bytes konvertieren, kommt die Codierung ins Spiel.
Wie Sie sehen, funktioniert die Art und Weise, wie Sie eine Zeichenfolge in ein Byte-Array mit einem Zeichensatz codiert und dann mit einem anderen dekodiert haben, nicht.
Können Sie uns mehr darüber erzählen, woher diese ursprüngliche Zeichenfolge stammt und warum sie Ihrer Meinung nach falsch codiert wurde?
quelle
Scheint etwas seltsamer Code. Um eine Zeichenfolge aus dem Utf8-Byte-Stream abzurufen, müssen Sie lediglich Folgendes tun:
Wenn Sie den ISO-8859-1-Byte-Stream irgendwo speichern müssen, verwenden Sie einfach: zusätzliche Codezeile für vorherige:
quelle
Ich habe gerade die Lösung von Nathan verwendet und sie funktioniert einwandfrei. Ich musste ISO-8859-1 in Unicode konvertieren:
quelle
quelle
Hier ist ein Beispiel für ISO-8859-9;
quelle