Erstmal ein freundliches Hallo, ich bin neu hier
Hätte auch direkt mal eine Frage und hoffe mir kann jemand auf die Sprünge helfen, so richtig verstehe ich dieses Thema leider nicht.
Ich lese Text aus einer HTML Quelltextdatei aus und speichere ihn in einer Datenbank.
Funktioniert auch prima, leider habe ich Probleme mit Umlauteten / Sonderzeichen.
Folgendes steht im <meta tag> der Datei:
Quelltext
1:
| <meta content="text/html;charset=utf-8"> |
Es scheint sich also um UTF-8 zu handeln.
Bisher konnte ich rausfinden dass c# immer UTF-16 verwendet und es sich bei beiden Zeichenätzen um Unicode handelt ?! (Ich verstehe nichtmal warum es dann überhaupt ein Problem gibt...)
Fakt ist jedenfalls ich extrahiere aus dem Quellcode Zeichenketten wie: "ß" gemeint ist ein "ß" oder "ö" gemeint ist ein "ö"
Das deckt sich hiermit:
bueltge.de/wp-conten...tf-8_kodierungen.pdf
Manchmal hab ich aber auch nicht so "abgespacte" Zeichen sondern etwas mit % Zeichen z.B.: "%C3%B6" was ebenfalls einem "ö" entspricht und mich zuätzlich verwirrt!
Ich hätte gerne einen lesbaren Datenbestand, wie muss ich da vorgehen?
Mein bisheriger Ansatz ist sowas:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| private string convertText2Unicode(string text) { if (text.Contains("%3A")) text = text.Replace("%3A", ":");
if (text.Contains("%27")) text = text.Replace("%27", "'");
if (text.Contains("ß")) text = text.Replace("ß", "ß");
if (text.Contains("ä")) text = text.Replace("ä", "ä");
if (text.Contains("ö")) text = text.Replace("ö", "ö");
if (text.Contains("ü")) text = text.Replace("ü", "ü");
if (text.Contains("Ä")) text = text.Replace("Ä", "Ä");
if (text.Contains("Ö")) text = text.Replace("Ö", "Ö");
if (text.Contains("Ü")) text = text.Replace("Ü", "Ü");
if (text.Contains("€")) text = text.Replace(" €", "");
return text; } |
Aber ich denke wir sind uns darüber einig, dass das eher naja.. nicht so toll ist..
Ich lese immer wieder etwas über ByteArrays[] und der Encoding Klasse verstehe es aber nicht so richtig, auch weil ich nicht weiß was überhaupt das Ziel ist.
Ich muss von von utf-8 auf utf-16 kodieren oder?
Hier noch etwas, dass ich von Google habe:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| private void btnStart_Click(object sender, EventArgs e) { string strUtf8 = "ä"; MessageBox.Show(DecodeFromUtf8(strUtf8)); }
public static string DecodeFromUtf8(string utf8String) { byte[] utf8Bytes = new byte[utf8String.Length]; for (int i = 0; i < utf8String.Length; ++i) { utf8Bytes[i] = (byte)utf8String[i]; }
return Encoding.UTF8.GetString(utf8Bytes, 0, utf8Bytes.Length); } |
Mit "ä" funktioniert das sogar, mit "Ü" leider nicht und mit "%C3%B6" auch nicht.
Ich bin total verwirrt

kann bitte jemand Licht in Dunkle bringen? Vielen Dank
Gruß
Moderiert von
Th69: Code- durch C#-Tags ersetzt