PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# Decoding von ?!?



UnKnOwN_86
19.04.2012, 11:50
Hi.

Gelöscht --> Gelöscht
Ich versuche gerade aus Gelöscht eine Gelöscht zu bekommen habe bereits folgendes probiert leider ohne erfolg...

System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetBytes("Gelöscht"));
System.Text.Encoding.UTF32.GetString(System.Text.Encoding.UTF32.GetBytes("Gelöscht"));
System.Text.Encoding.Unicode.GetString(System.Text.Encoding.Unicode.GetBytes("Gelöscht"));
System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes("Gelöscht"));
System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes("Gelöscht"));
System.Text.Encoding.BigEndianUnicode.GetString(System.Text.Encoding.BigEndianUn icode.GetBytes("Gelöscht"));
System.Text.Encoding.Default.GetString(System.Text.Encoding.Default.GetBytes("Gelöscht"));

Hoffe ihr könnt mir helfen...

Zur Info ich bekomme dieses Resultat wenn ich bei MySql dieses select ausführe:
select ABC_DELETED as Gelöscht fom tblABC; Nun versuche ich per C# dies wieder schön darzustellen. Ich habe auf dem Server keine Rechte um kollation oder sonst was zu ändern damit von MySql gleich Gelöscht heraus kommt, daher mein Versuch mit C#

MacGyver
19.04.2012, 12:04
Kannste das nicht schon im SQL-Statement konvertieren? Dafür braucht man keine Änderungsrechte.

UnKnOwN_86
19.04.2012, 12:11
Wennst mir sagen kannst wie, dann mache ich es so? Geht das im select?

calav3ra_de
19.04.2012, 12:12
Für mich sieht "Gelöscht" nach utf8 aus. so konnte ich es jedenfalls in NP++ konvertieren.

PS: Ok, U16 LE/BE geht auch. Naja, schau halt was dir die DB zurückliefert?

MacGyver
19.04.2012, 12:13
Müsste mit CAST oder CONVERT gehen. Beispiele gibts in der MySQL Hilfe.

Hier z.B. -> http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html

UnKnOwN_86
19.04.2012, 12:15
Ich glaube du hast es falsch verstanden.. es geht um keinen wert in der datenbank sonder wenn ich mit as Gelöscht den Namen der Spalte ändern möchte erhalte ich dieses Format in der DataTable als ColumnName. Somit kann ich cast nicht verwenden.

Denn Cast auf einen Spaltenname wird wohl nicht gehen.

Ergänzung vom 19.04.2012 12:19 Uhr:
Für mich sieht "Gelöscht" nach utf8 aus. so konnte ich es jedenfalls in NP++ konvertieren.

PS: Ok, U16 LE/BE geht auch. Naja, schau halt was dir die DB zurückliefert?

Die DB liefert mir den Spaltenname eben nicht als Gelöscht zurück sondern mit diesem komsichen Zeichen, wie kann ich es nun wieder in Gelöscht zurück bringen habe es mit UF8 schon probiert bekommt aber wieder "Gelöscht" zurück..

System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetBytes("Gelös cht"));

calav3ra_de
19.04.2012, 12:52
dein test kann eventuell gar nicht funktionieren!

nur mal so am rande. was ist denn mit strings innerhalb von "" in c#? ist das nicht vielleicht automatisch unicode? und eventuell solltest du im zweiten teil ansi verwenden, weil es ansi bytes sind?


wiegesagt, guck in mysql, und versuch die daten von dort zu konvertieren anstatt deines sourcecode-strings.

UnKnOwN_86
19.04.2012, 13:57
dein test kann eventuell gar nicht funktionieren!

nur mal so am rande. was ist denn mit strings innerhalb von "" in c#? ist das nicht vielleicht automatisch unicode? und eventuell solltest du im zweiten teil ansi verwenden, weil es ansi bytes sind?


wiegesagt, guck in mysql, und versuch die daten von dort zu konvertieren anstatt deines sourcecode-strings.

Wie schon weiter oben versucht zu erklärt, es geht um einen Spaltenname wie soll ich einen Spaltenname casten und/oder converten?!? Es geht nicht um Werte in der Splate sondern ich versuche mit Hilfe von as den Spaltennamen zu verändern.
Sql Befehl vom ersten Post:
select AB_DELETED as Gelöscht from tblABC; wenn ich nun diesen Befehl in ein DataTable lade bekomme ich anstatt Gelöscht diese Zeichenfolge also SpaltenName (DataColumn.ColumnName).

Ich habe es jetzt so hinbekommen: (dc.ColumnName = "Gelöscht")
System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Default.GetBytes(dc.Col umnName)); Bin alle durch gegangen und dies lieferte das gewünschte Ergebnis.

Wenn es mit Sql Befehl geht bitte sagt mir wie.

MacGyver
20.04.2012, 09:34
Ich glaube du hast es falsch verstanden.. es geht um keinen wert in der datenbank sonder wenn ich mit as Gelöscht den Namen der Spalte ändern möchte erhalte ich dieses Format in der DataTable als ColumnName. Somit kann ich cast nicht verwenden.

Denn Cast auf einen Spaltenname wird wohl nicht gehen.


Ach so. Ja, das habe ich in der Tat anders verstanden.

Ich gehe mal davon aus, dass mySQL dein SQL-Select Statement im Default-Encoding annimmt und den im Standardencoding vorhandenen Spaltennamen nicht in UTF8 konvertiert, sondern einfach so zurückliefert wie er ist. Dadurch geht er kaputt.

Versuch mal dein SQL-Statement selbst vor dem Senden an die Datenbank in UTF8 zu konvertieren. Wenn meine Annahme stimmt, müsste der alternative Spaltenname richtig zurückkommen.

EDIT: Oder noch einfacher: Mach mal SELECT * FROM und schau wie der Spaltenname dann aussieht.

calav3ra_de
20.04.2012, 13:42
ja aber nur ist latin in utf8 genau das selbe wie in ansi. das wird nicht funktionieren

Ergänzung vom 20.04.2012 15:44 Uhr: leute, jetzt mal ehrlich. was er da am ende mit der column macht ist doch folgendes:

utf8 to string.

und was ist das in c# by default? nicht etwa unicode?

und ich glaube nicht, das sql das kann. dü müsstest ihm sowieso sagen, ob du LE oder BE unicode haben willst.

lieg ich da falsch?