Range check error. |
int x = (int)liter(1);
String tekst = L"à"; // <- tutaj zabrakło L, aczkolwiek nie rozumiem dlaczego
int x = (int)tekst[1];
(...) gdyż powyżej 255 nie trzeba już dodawać tego L.
Hmm, powyżej 255 w typie char nie zmieścisz...
Application->MessageBox( L"Komunikat", L"Tytuł", MB_OK);
// lub:
Application->MessageBox(L"Długi" // tutaj L
L"Komunikat", // i tutaj L
L"Tytuł", MB_OK);
String message = "ĄĘŚĆŻŹ "
" ąęśćżźó";
Application->MessageBox(message.w_str(), L"Tytuł", MB_OK);
String __fastcall Decode_ISO_88591(String webText)
{
webText = StringReplace(webText, "+", " ", TReplaceFlags() << rfReplaceAll);
String tabLitery =
L"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ";
String tabSymbole[] = {
"Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil",
"Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml",
"ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", "Oslash",
"Ugrave", "Uacute", "Ucirc", "Uuml", "Yacute", "THORN", "szlig", "agrave",
"aacute", "acirc", "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
"eacute", "ecirc", "euml", "igrave", "iacute", "icirc", "iuml", "eth",
"ntilde", "ograve", "oacute", "ocirc", "otilde", "ouml", "oslash", "ugrave",
"uacute", "ucirc", "uuml", "yacute", "thorn", "yuml"
};
for(unsigned int i = 0; i < ARRAYSIZE(tabSymbole); i++)
{
webText = StringReplace(webText, "&" + tabSymbole[i] + ";", tabLitery[i + 1],
TReplaceFlags() << rfReplaceAll);
}
return webText;
}
Podałem, że powyżej 255 nie trzeba dokonywać konwersji gdyż podanym sposobem sprawdzałem wartość litery ą i wskazało mi chyba 261, z konwersją i bez konwersji było tak samo.
Co do tego L to spawa nie jest taka oczywista.
Jeżeli jednak wprowadzę do łańcucha znaków literę z zakresu 128-255 to muszę użyć L
Wychodzi mi więc, że polskie znaki diakrytyczne zawierają się w przedziale 0-127.
Działa jak należy, ale może ktoś ma lepsze propozycje?!
Nie. Wszelkie znaki diakrytyczne, nie tylko polskie, zawierają się w przedziale powyżej 127 (tzw. extended ASCII)
Cyfrowy Baron napisał(a):Jeżeli jednak wprowadzę do łańcucha znaków literę z zakresu 128-255 to muszę użyć L
Nie musisz. Ale nie możesz używać znaków, które nie należą do danej strony kodowej.
Użyłbym std::mapy.
Mam tutaj tablicę ASCII i nie mam polskich znaków diakrytycznych w żadnych przedziale, czyli nie ma ich w przedziale 0-255
Jeżeli do zmiennej UnicodeString znak z zakresu 128-255 i nie poprzedzę go literałem L, to nie wyświetli mi tego znaku, lecz inny zastępczy.
Pokaż jak!
Chwila, ale to są kody unikodu! Mówimy o kodowaniu ANSI (vide CP852, CP1250 i ISO 8859-2).
Nie no, bez przesady, nie będę za Ciebie pisał kodów
std::map<String, String> iso;
iso["è"] = "è";
Ja od początku pisze o UnicodeString więc o unicode, co do strony kodowej to chodzi mi o ISO 8859-1 a nie ISO 8859-2.
UnicodeString liter = "À";
Dało by się to zrobić, ale byłoby to bardziej skomplikowane, a więc mniej praktyczne.
Powrót do Ogólne problemy z programowaniem
Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 14 gości