Text dekodieren
-
Hallo,
ß => ß
Wie kann ich sowas dekodieren?
Danke,
NewbP.S.: Das stammt aus einem xml File, in dem
<?xml version="1.0" encoding="UTF-8" ?>
steht aber Utf-8 kann das nicht sein, denn dafür habe ich schon ne Funktion:CString utf8_decode(CString utf8text) { CString ansitext; char m[500]; WCHAR w[500]; strcpy(m, utf8text); MultiByteToWideChar(CP_UTF8, 0, m, -1, w, sizeof(w) / sizeof(WCHAR)); WideCharToMultiByte(CP_ACP, 0, w, -1, m, sizeof(m), 0, 0); ansitext = m; return ansitext; }
-
Misst, der Browser interpretiert das Zeichen schon von allein
UND#223; => ß
-
Wenn ich wenigstens wüsste, wie das heißt, womit der Text kodiert ist.
Es ist kein utf-8 aber was ist es?
-
Okay, es handelt sich also um unicode ... wie kriege ich das jetzt in "ü"
-
vielleicht hilft dir DAS HIER ?
mfg,
julian
-
Okay, die Erleuchtung kam spät aber aber sie kam.
Ich habe jetzt selbst eine Funktion geschrieben:CString CSherlockDlg::html_decode(CString encodedStr) { // Variablen CString s1, s2, str_code, replace_str, replace_old; int p1, p2, int_code; // Die Event-Schleife s1 = "&#"; s2 = ";"; p1 = 0; p2 = 0; while(true) { p1 = encodedStr.Find(s1, p2); p2 = encodedStr.Find(s2, p1+1); if(p1==-1 || p2==-1) break; if(p2-p1<6) { // Hier wird das Zeichen als CString gespeichert str_code = encodedStr.Mid(p1+s1.GetLength(),p2-p1-s1.GetLength()); p2 = p2+1; // Hier wird das Zeichen als int gespeichert int_code = atoi( (LPCTSTR) str_code ); // Konvertierung von int-Zeichen nach CString replace_str = (CString) int_code; // Die Zeichen, die ersetzt werden sollen replace_old = s1+str_code+s2; // Hier wird das Zeichen ersetzt encodedStr.Replace(replace_old,replace_str); } } return encodedStr; }Bye bye,
MichaelP.S.:
Bei Fragen zur Funktion: Hecker.Michae@gmx.de">Hecker.Michae@gmx.de
-
-
Ich hatte noch einen kleinen Bug drin.
Hier jetzt die fertige Funktion:CString html_decode(CString encodedStr) { // Variablen CString s1, s2, str_code, replace_str, replace_old; int p1, p2, int_code; // Die Event-Schleife s1 = "&#"; s2 = ";"; p1 = 0; p2 = 0; while(true) { p1 = encodedStr.Find(s1, 0); p2 = encodedStr.Find(s2, p1); if(p1==-1 || p2==-1) break; if(p2-p1<6) { // Hier wird das Zeichen als CString gespeichert str_code = encodedStr.Mid(p1+s1.GetLength(),p2-p1-s1.GetLength()); // Hier wird das Zeichen als int gespeichert int_code = atoi( (LPCTSTR) str_code ); // Konvertierung von int-Zeichen nach CString replace_str = (CString) int_code; // Die Zeichen, die ersetzt werden sollen replace_old = s1+str_code+s2; // Hier wird das Zeichen ersetzt encodedStr.Replace(replace_old,replace_str); } } return encodedStr; }Liebe Grüße,
Michael
-
Hab es mal kurz für STL Benutzer umgeschrieben ^^ Ist ein wenig kürzer ... wenn wahrscheinlich auch ein wenig ineffizient ... und ist ungetestet ... nur reingetippt ... sorry
void html_decode(std::string& string) { std::string::size_type pos_begin = std::string::npos; std::string::size_type pos_end = std::string::npos; std::string string_letter; std::string string_replace; while (((pos_begin = string.find_first_of("&#", 0)) != std::string::npos) && ((pos_end = string.find_first_of(';', pos_begin)) != std::string::npos)) { if ((pos_end - pos_begin) < 6) { string_letter = string.substr(pos_begin + 2, pos_end); string_replace = (char)atoi(string_letter.c_str()); string.replace(pos_begin, pos_end - pos_begin, string_replace); } } }Aja so wird man auch keine Fehlermeldung erhalten von wegen condition constant ...