Ich ziehe einige internationalisierte Text aus einer MS SQL Server 2005-Datenbank. Entsprechend den Voreinstellungen für diesen DB werden die Zeichen als UCS-2 gespeichert. Allerdings muss ich die Daten im UTF-8-Format ausgeben, da ich sie über das Internet sende. Derzeit habe ich den folgenden Code zu konvertieren:Convert UCS-2-Zeichen in UTF-8 mit C#
SqlString dbString = resultReader.GetSqlString(0);
byte[] dbBytes = dbString.GetUnicodeBytes();
byte[] utf8Bytes = System.Text.Encoding.Convert(System.Text.Encoding.Unicode,
System.Text.Encoding.UTF8, dbBytes);
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
string outputString = encoder.GetString(utf8Bytes);
Allerdings, wenn ich die Ausgabe im Browser untersuchen, scheint es, Müll zu sein, egal was stelle ich die Codierung.
Was fehlt mir?
EDIT: Als Antwort auf die Antworten unten, der Grund, ich dachte, dass ich eine Konvertierung durchführen musste, ist, weil ich Literal Multibyte Strings ganz gut ausgeben kann. Zum Beispiel:
OutputControl.Text = "カルフォルニア工科大学とチューリッヒ工科大学は共同で、太陽光を保管可能な燃料に直接変えることのできる装置の開発に成功したとのこと";
funktioniert. Hier ist OutputControl
ein ASP.Net Literal. Jedoch
OutputControl.Text = outputString; //Output from above snippet
führt zu Mangled-Ausgabe wie oben beschrieben. Meine Hypothese war, dass die Ausgabe der Datenbank irgendwie von ASP.Net gestört wurde. Wenn das nicht der Fall ist, was sind dann andere Möglichkeiten?
EDIT 2: Okay, ich bin dumm. Es stellt sich heraus, dass an der Datenbank überhaupt nichts falsch ist. Als ich versuchte, meine eigenen Literal-Doppelbyte-Zeichen (材料,原料;木料
) einzufügen, konnte ich sie ohne jeglichen Umwandlungsprozess lesen und ausgeben. Es scheint mir, dass das, was auch immer die Daten in die DB einfügt, die Charaktere irgendwie verfälscht, also werde ich mir das ansehen. Mit meinen verifizierten, "sauberen" Daten funktioniert der folgende Code:
wie die Antworten unten angeben, sollte es.
Woran denken Sie, dass Sie in UTF-8 konvertieren müssen? – Gabe
Und wenn Sie meine Frage vor 6 Stunden beantwortet hatten, irr, macht nichts ... –