Wartość liczbowa znaku w zmiennej UnicodeString

dział ogólny

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez polymorphism » sobota, 22 maja 2010, 11:33

Jako że lubię takie drobiazgi operujące na tekście, musiałem napisać odpowiedni kod:
Kod: Zaznacz cały
const unsigned html_entity_size = 142;

static const wchar_t* html_entity_names[] =
{
   L"AElig", L"Aacute", L"Acirc", L"Agrave", L"Aring", L"Atilde",
   L"Auml", L"Ccedil", L"Dagger", L"ETH", L"Eacute", L"Ecirc", L"Egrave",
   L"Euml", L"Iacute", L"Icirc", L"Igrave", L"Iuml", L"Ntilde", L"OElig",
   L"Oacute", L"Ocirc", L"Ograve", L"Omega", L"Oslash", L"Otilde", L"Ouml",
   L"Scaron", L"THORN", L"Uacute", L"Ucirc", L"Ugrave", L"Uuml", L"Yacute",
   L"Yuml", L"Zcaron", L"aacute", L"acirc", L"acute", L"aelig", L"agrave",
   L"amp", L"apos", L"aring", L"asymp", L"atilde", L"auml", L"bdquote",
   L"brvbar", L"bull", L"ccedil", L"cedil", L"cent", L"circ", L"copy",
   L"curren", L"dagger", L"deg", L"divide", L"eacute", L"ecirc", L"egrave",
   L"eth", L"euml", L"euro", L"fnof", L"frac12", L"frac14", L"frac34",
   L"frasl", L"ge", L"gt", L"hellip", L"hibar", L"iacute", L"icirc",
   L"iexcl", L"igrave", L"infin", L"int", L"iquest", L"iuml", L"laquo",
   L"ldquo", L"le", L"loz", L"lsaquo", L"lsquo", L"lt", L"mdash",
   L"micro", L"middot", L"nbsp", L"ndash", L"ne", L"not", L"ntilde",
   L"oacute", L"ocirc", L"oelig", L"ograve", L"ordf", L"ordm", L"oslash",
   L"otilde", L"ouml", L"para", L"part", L"permil", L"pi", L"plusmn",
   L"pound", L"prod", L"quot", L"radic", L"raquo", L"rdquo", L"reg",
   L"rsaquo", L"rsquo", L"sbquo", L"scaron", L"sect", L"shy", L"sum",
   L"sup1", L"sup2", L"sup3", L"szlig", L"thorn", L"tilde", L"times",
   L"trade", L"uacute", L"ucirc", L"ugrave", L"uml", L"uuml", L"yacute",
   L"yen", L"yuml", L"zcaron"
};

static const wchar_t html_entity_ucodes[] =
{
   198, 193, 194, 192, 197, 195, 196, 199, 8225,
   208, 201, 202, 200, 203, 205, 206, 204, 207, 209,
   338, 211, 212, 210, 937, 216, 213, 214, 352, 222,
   218, 219, 217, 220, 221, 376, 381, 225, 226, 180,
   230, 224, 38, 39, 229, 8776, 227, 228, 8222, 166,
   8226, 231, 184, 162, 710, 169, 164, 8224, 176, 247,
   233, 234, 232, 240, 235, 8364, 402, 189, 188, 190,
   8260, 8805, 62, 8230, 175, 237, 238, 161, 236, 8734,
   8747, 191, 239, 171, 8220, 8804, 9674, 8249, 8216, 60,
   8212, 181, 183, 160, 8211, 8800, 172, 241, 243, 244,
   339, 242, 170, 186, 248, 245, 246, 182, 8706, 8240,
   960, 177, 163, 8719, 34, 8730, 187, 8221, 174, 8250,
   8217, 8218, 353, 167, 173, 8721, 185, 178, 179, 223,
   254, 732, 215, 8482, 250, 251, 249, 168, 252, 253,
   165, 255, 382
};

wchar_t get_wcode(std::wstring::const_iterator i1,std::wstring::const_iterator i2)
{
   wchar_t tmp[50];
   std::copy(i1,i2,tmp);
   tmp[i2 - i1] = 0;

   if(tmp[0] == '#')
   {
      int c;
      return (swscanf(&tmp[1],L"%i",&c) == 1) ? (wchar_t)c : L'?';
   }

   struct comp
   {
      bool operator()(const wchar_t *p1,const wchar_t *p2)const
      {
         return wcscmp(p1,p2) < 0;
      }
   };

   const wchar_t** p = std::lower_bound(html_entity_names,
                              html_entity_names + html_entity_size ,
                              tmp,
                              comp());

   if(p != html_entity_names + html_entity_size && wcscmp(tmp,*p) == 0)
   {
      return html_entity_ucodes[p - html_entity_names];
   }
   
   return L'?';
}


wstring html_dec_chars(const std::wstring &str)
{
   std::wstring::const_iterator i1 = str.begin();
   std::wstring::const_iterator i2 = i1;
   std::wstring::const_iterator i3 = str.end();
   std::wstring out;

   while(i1 != i3)
   {
      while(i2 != i3 && *i2 != L'&')++i2;
      out.append(i1,i2);
      i1 = i2;
      if(i1 != i3)++i1;
      i2 = i1;
      while(i2 != i3 && *i2 != L';')++i2;
      out.append(1,get_wcode(i1,i2));
      if(i2 != i3)++i2;
      i1 = i2;
   }

   return out;
}

Użycie:
Kod: Zaznacz cały
wstring s = L"&Acirc;sasasaasa&amp;6666";

wstring o = html_parse(s); 

html_entities zawiera chyba wszystkie możliwe kody. No i całość jest bardziej przenośna, niezależna od kodowania IDE.
____
p.s. formatowanie php wymięka przy tej ilości kodu. Dziwne, bo strasznie dużo go nie ma :|
Ostatnio edytowano sobota, 22 maja 2010, 13:33 przez polymorphism, łącznie edytowano 1 raz
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez Cyfrowy Baron » sobota, 22 maja 2010, 12:03

Na pewno jest to bardziej przenośne, ale czy szybsze od mojego kodu? Nie wiem, nie analizowałem, gdyż mam nowy problem, jak przekodować tekst z Utf8 na Unicode.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez polymorphism » sobota, 22 maja 2010, 12:30

ale czy szybsze od mojego kodu?

Na pewno. Jak już pisałem, analizujesz 62 razy tekst, dla każdego elementu z tablicy tabSymbole. U mnie jest tylko jeden przebieg. Samo wyszukiwanie słów na złożoność log2N, co dla 147 elementów daje średnio ~7 porównań. Czyli: szybkość, przenośność, funkcjonalność.

jak przekodować tekst z Utf8 na Unicode.

Przecież w VCL-u masz odpowiednie funkcje do tego, chyba nawet na tym forum pisałem o nich, poszukaj.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez Cyfrowy Baron » sobota, 22 maja 2010, 12:43

Jednak Twój kod nie jest tak przenośny jak sądziłem. Próbując go użyć w środowisku C++Builder 2010 otrzymuję mnóstwo komunikatów o błędach w bibliotece xstring, przy czym do projektu włączam bibliotekę string.

► lista błędów 




Przecież w VCL-u masz odpowiednie funkcje do tego, chyba nawet na tym forum pisałem o nich, poszukaj.


Nie działają jak bym tego oczekiwał. Być może nie o taką konwersję chodzi.

Mam znak Ä… chcę podstawić pod niego literę ą więc nie jestem pewnej czy chodzi o konwersję z Utf8 do UnicodeString czy z UnicodeString do Utf8.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez polymorphism » sobota, 22 maja 2010, 13:07

Jednak Twój kod nie jest tak przenośny jak sądziłem.

Przenośny to on jest... no może z wyjątkiem definicji comp wewnątrz funkcji, choć nie wiem co mówi o tym standard C++. Co do samej treści błędów, to nie bardzo wiem, do czego one się odnoszą.

p.s. dołącz plik algorithm, jeśli tego nie zrobiłeś.

Mam znak Ä… chcę podstawić pod niego literę ą więc nie jestem pewnej czy chodzi o konwersję z Utf8 do UnicodeString czy z UnicodeString do Utf8.

Jeśli Ty nie wiesz, jakie to kodowanie, to kto ma to wiedzieć? ;) Kodu nie podałeś, więc trudno coś sensownego napisać.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez polymorphism » sobota, 22 maja 2010, 13:36

Poprawiłem nieco kod, dzięki czemu będzie poprawnie przetwarzał zapis w formie &#<(uni)kod litery>;
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez Cyfrowy Baron » sobota, 22 maja 2010, 13:39

Dołączenie biblioteki algorthm niczego nie zmienia. Występuje jakaś niezgodność Twojego kodu z biblioteką xstring która jest połączona z biblioteką string.



Jeśli Ty nie wiesz, jakie to kodowanie, to kto ma to wiedzieć?


Chodzi o to, że zmienna typu UnicodeString zawiera tekst pobrany z kodu strony html, w którym zamiast polskich znaków diakrytycznych są znaki zastępcze kodowania Utf8, czyli coś takiego: "Nic Ĺ›miesznego" a powinno być: "Nic śmiesznego".

Poradziłem sobie z tym na swój sposób:

Kod: Zaznacz cały
String __fastcall UnicodeToUtf8(String webText)
{
String tabLitery = L"ĄąĆćĘꣳŃńŚśŻżŹź";

String tabSymbole[] = {L"Ą", L"ą", L"Ć", L"ć", L"Ę", L"ę", L"Ł",
L"ł", L"Ń", L"ń", L"Ś", L"ś", L"Ż", L"ż", L"Ź", L"ź"};


for(unsigned int i = 0; i < ARRAYSIZE(tabSymbole); i++)
{
  webText = StringReplace(webText, tabSymbole[i], tabLitery[i + 1],
                                            TReplaceFlags() << rfReplaceAll);
}


return webText;
}
//---------------------------------------------------------------------------


Dało by się to zrobić prościej i lepiej, ale na razie mi wystarczy.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez Cyfrowy Baron » sobota, 22 maja 2010, 13:49

Poprawiłem nieco kod, dzięki czemu będzie poprawnie przetwarzał zapis w formie &#<(uni)kod litery>;


Nic to nie dało:

Kod: Zaznacz cały
_BUF_SIZE = 16 / sizeof (_Elem) < 1 ? 1


[BCC32 Error] xstring(1667): E2108 Improper use of typedef '_Elem'
[BCC32 Error] xstring(1667): E2109 Not an allowed type
[BCC32 Warning] xstring(1667): W8082 Division by zero



Kod: Zaznacz cały
: 16 / sizeof(_Elem)};

Te same komunikaty błędu.

Kod: Zaznacz cały
_ALLOC_MASK = sizeof (_Elem) <= 1 ? 15

jak wyżej, ale bez "[BCC32 Warning] xstring(1667): W8082 Division by zero"

Kod: Zaznacz cały
: sizeof (_Elem) <= 2 ? 7
         : sizeof (_Elem) <= 4 ? 3
         : sizeof (_Elem) <= 8 ? 1 : 0};


Nie wymieniam wszystkich, gdyż błędy wskazują na bibliotekę xstring a nie na Twój kod.
jak wyżej, ale bez "[BCC32 Warning] xstring(1667): W8082 Division by zero"
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez polymorphism » sobota, 22 maja 2010, 13:54

w którym zamiast polskich znaków diakrytycznych są znaki zastępcze kodowania Utf8

Nie kumam. Podaj adres tej strony.

Nie wymieniam wszystkich, gdyż błędy wskazują na bibliotekę xstring a nie na Twój kod.

Ciekawe. A tak w ogóle to wstring działa pod BCB?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez Cyfrowy Baron » sobota, 22 maja 2010, 13:56

filmweb.pl

Po pobraniu źródła strony do obiektu Memo zamiast polskich znaków diakrytycznych mam te zastępcze, ale to samo źródło zapisane przez Memo do pliku i wyświetlane w Notatniku zawiera prawidłowe polskie znaki, ale wczytane do Memo już nie. Nie rozumiem w czym tkwi błąd.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez polymorphism » sobota, 22 maja 2010, 14:16

Czyli co, niby po zapisie do pliku &amp; staje się ampersandem? Coś mi się nie chce wierzyć...


A propos mojego kodu, próbowałeś wyrzucić definicję comp poza ciało funkcji? Bo sprawdzałem na gcc i miał z tym problemy. Dopiero po wywaleniu definicji poszło.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez Cyfrowy Baron » sobota, 22 maja 2010, 15:00

Czyli co, niby po zapisie do pliku &amp; staje się ampersandem?


Nie! Problem nie dotyczy tych znaków, gdyż one w podglądzie strony są ampersandem i nie zmieniają się. Chodzi o polskie znaki diakrytyczne czyli, ą, ę, ś, ć, itd. W podglądzie strony w Notatniku wyświetlane są jako znaki polskie, ale po pobraniu źródła strony do Memo zamiast polskich znaków pojawiają się znaki zastępcze, które podałem wcześniej. Wygląda to tak jakby klasa TStream nie potrafiła prawidłowo zinterpretować tych znaków, albo też wyświetla je dokładnie takimi jakie są, a to Notatnik podczas wyświetlania pliku zakodowanego w Utf8 dokonuje już konwersji. Podejrzałem taki plik edytorem Gsalister i rzeczywiście są w nim znaki zastępcze, a nie polskie znaki diakrytyczne.

Kod pobierający źródło strony do zmiennej typu UnicodeString.

Kod: Zaznacz cały

 TStringStream 
*webPage = new TStringStream();

 
IPersistStreamInit *psi;

 
TStreamAdapter *sa = new TStreamAdapter(webPagesoReference);

 if(
SUCCEEDED(WebBrowser1->Document->QueryInterface(IID_IPersistStreamInit,
              (
void **)&psi)))
 {
  
psi->Save(*safalse);
  
psi->Release();
 }

 
UnicodeString parseText webPage->DataString;

 
delete webPage;
 


Początkowo sądziłem, że polskie znaki zostają zamienione na zastępcze w zmiennej UnicodeString, ale nie okazało się, że takie zostają pobrane ze strony.



Wyrzucenie struktury poza funkcję niczego nie zmienia. Problem polega na niezgodności Twojego kodu z biblioteką string środowiska RAD Studio 2010. Szukałem trochę w sieci i wiele osób ma problemy z xstring więc może to być jakiś bug środowiska.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez polymorphism » sobota, 22 maja 2010, 15:47

Chodzi o polskie znaki diakrytyczne czyli, ą, ę, ś, ć, itd. W podglądzie strony w Notatniku wyświetlane są jako znaki polskie, ale po pobraniu źródła strony do Memo zamiast polskich znaków pojawiają się znaki zastępcze, które podałem wcześniej.

Jeśli stronę ściągasz w utf-81), a memo natywnie chodzi w unikodzie, to nie powinno być problemów, ewentualnie coś nie tak z czcionką. To rozwiązanie, które podałeś wcześniej jest nieprawidłowym obejściem problemu. Jeśli wszystko chodzi w unikodzie, problemów tego typu nie powinno być.

1) według tego co ściąga FF, to jest to właśnie takie kodowanie.



Szukałem trochę w sieci i wiele osób ma problemy z xstring więc może to być jakiś bug środowiska.

Jak dla mnie jakoś to mało prawdopodobne. Przecież string to chyba najbardziej podstawowy element standardowej biblioteki C++. I co, taki błąd? W tak drogim środowisku?! Niewiarygodne...

Nie odpowiedziałeś mi na wcześniejsze pytanie: da się w ogóle definiować jakąś zmienną wstring i operować na niej?

W sumie nic nie stoi na przeszkodzie, żeby przerobić ten kod na inny typ stringa.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez Cyfrowy Baron » sobota, 22 maja 2010, 18:29

W C++ Builder 2010 wszystko chodzi w Unicode to jest domyślne kodowanie. Czcionka to Tahoma z charsetem ustawionym na default, ale testowałem różne ustawienia charsetu bez efektu. Klasa TMemo działa w Unicode.

Tutaj masz przykładowy program ze źródłem, jeżeli chcesz się przekonać naocznie:
testweb.rar




Co się tyczy Twojego kodu, to mogę deklarować i używać typu wstring po włączeniu biblioteki string, ale Twojego kodu w żaden sposób nie mogę użyć.
I co, taki błąd? W tak drogim środowisku?! Niewiarygodne...


Nie ma w tym niczego niewiarygodnego. Pierwsza wersja tego środowiska zawierała mnóstwo błędów i wiele bibliotek działało błędnie w różnych konfiguracjach. Teraz używam tego środowiska z poprawkami, więc jest już lepiej, ale jeszcze nie wszystko działa jak należy, dlatego niecierpliwie oczekuję kolejnych poprawek.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wartość liczbowa znaku w zmiennej UnicodeString

Nowy postprzez Cyfrowy Baron » sobota, 22 maja 2010, 18:43

OK! Znalazłem rozwiązanie. Przed pobraniem źródła strony trzeba ustawić enkodowanie na UTF8:

Kod: Zaznacz cały

void __fastcall TForm1
::Button2Click(TObject *Sender)
{
 
TEncoding *Encoding;

 
TStringStream *webPage = new TStringStream(NULLEncoding->UTF8true );

 
IPersistStreamInit *psi;

 
TStreamAdapter *sa = new TStreamAdapter(webPagesoReference);

 if(
SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IPersistStreamInit,
              (
void **)&psi)))
 {
  
psi->Save(*safalse);

  
Memo1->Text webPage->DataString;
  
psi->Release();
 }

 
Form2->Show();
}
 
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości

cron