Ich habe eine Zeichenfolge, die ich von einer Drittanbieter-App erhalte, und möchte sie in jeder Sprache mit C # auf meiner Windows-Oberfläche korrekt anzeigen.
Aufgrund der falschen Codierung sieht ein Teil meiner Zeichenfolge auf Spanisch folgendermaßen aus:
Acción
während es so aussehen sollte:
Acción
Gemäß der Antwort auf diese Frage: Wie man die Zeichenfolgencodierung in C # kennt , sollte die Codierung, die ich erhalte, bereits auf UTF-8 verfügbar sein, sie wird jedoch auf Encoding.Default (wahrscheinlich ANSI?) Gelesen.
Ich versuche, diese Zeichenfolge in echtes UTF-8 umzuwandeln, aber eines der Probleme besteht darin, dass ich nur eine Teilmenge der Encoding-Klasse sehen kann (nur UTF8- und Unicode-Eigenschaften), wahrscheinlich weil ich auf die Windows-Oberflächen-API beschränkt bin.
Ich habe einige Schnipsel ausprobiert, die ich im Internet gefunden habe, aber keines davon hat sich bisher für östliche Sprachen (dh Koreanisch) als erfolgreich erwiesen. Ein Beispiel ist wie folgt:
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);
Ich habe auch versucht, die Zeichenfolge in ein Byte-Array zu extrahieren und dann UTF8.GetString zu verwenden:
byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
char ch = myString[ix];
myByteArray[ix] = (byte) ch;
}
myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);
Habt ihr noch andere Ideen, die ich ausprobieren könnte?
Encoding.Default
die ANSI-Codepage des Systems zurück.Antworten:
Wie Sie wissen, kommt die Zeichenfolge herein, da
Encoding.Default
Sie einfach Folgendes verwenden könnten:Eine andere Sache, die Sie möglicherweise beachten müssen: Wenn Sie Console.WriteLine verwenden, um einige Zeichenfolgen auszugeben, sollten Sie auch schreiben
Console.OutputEncoding = System.Text.Encoding.UTF8;
!!! Oder alle utf8-Strings werden als gbk ausgegeben ...quelle
Encoding.GetEncoding(...)
; Sie müssen den Namen der tatsächlichen Codierung finden, die am anderen Ende falsch verwendet wurde.myString
Mojibake ist. Der Code macht zuerst die falsche Dekodierung rückgängig und führt dann die richtige Dekodierung durch. Es funktioniert, solange die falsche Dekodierung keine Daten verloren hat. Aber wie @SLaks betonte, wäre es besser, die genaue Codierung zu verwenden, die falsch war. (Bessere Namen und Kommentare im Code würden helfen zu verstehen, wie sehr falsch aussehender Code tatsächlich ein Versuch ist, richtig zu machen.)Die Ausgabe sollte so aussehen
call DecodeFromUtf8 ();
quelle
Ihr Code liest eine Folge von UTF8-codierten Bytes und decodiert sie mithilfe einer 8-Bit-Codierung.
Sie müssen diesen Code korrigieren, um die Bytes als UTF8 zu dekodieren.
Alternativ ( nicht ideal ) können Sie die fehlerhafte Zeichenfolge zurück in das ursprüngliche Byte-Array konvertieren, indem Sie sie mit der falschen Codierung codieren, und dann die Bytes als UTF8 neu decodieren.
quelle
quelle
Wenn Sie eine Zeichenfolge in der MySQL-Datenbank speichern möchten, gehen Sie wie folgt vor: ->
Ihre Datenbankfeldstruktur i phpmyadmin [oder ein anderes Kontrollfeld] sollte auf utf8-gerneral-ci eingestellt sein
2) Sie sollten Ihre Zeichenfolge ändern [Bsp. textbox1.text] zu Byte, dafür
2-1) definiere Byte [] st2;
2-2) Konvertieren Sie Ihre Zeichenfolge [textbox1.text] in Unicode [mmultibyte string] durch:
3) Führen Sie diesen SQL-Befehl vor jeder Abfrage aus:
3-2) Jetzt sollten Sie diesen Wert in das Namensfeld einfügen, indem Sie:
4) Die Hauptaufgabe, auf die viele Lösungen nicht geachtet haben, ist die folgende Zeile: Sie sollten addwithvalue verwenden, anstatt den folgenden Befehlsparameter hinzuzufügen:
++++++++++++++++++++++++++++++++++++ Genießen Sie echte Daten auf Ihrem Datenbankserver anstatt ????
quelle
Verwenden Sie das folgende Code-Snippet, um Bytes aus der CSV-Datei abzurufen
Rufen Sie unten an und speichern Sie es als Anhang
quelle