Ĺadny brzuch
Witajcie,
Grzebałem sporo w Googlach i na sporej ilości różnych forum internetowych.
Problem jest następujący, potrzeba konwersji ciągu znaków char na lpcwstr.
Znalazłem częściowe rozwiązanie w postaci funkcji mbstowcs()
wchar_t *wide_char(char *text) { wchar_t *nText = NULL; int size; size = strlen(text) + 1; nText = (wchar_t *)malloc(sizeof(wchar_t)*size); mbstowcs(nText, text, size); return nText; }
Jednak przy próbie konwersji polskich znaków zaczynają się schody.
Przeczytałem gdzieś, są one inaczej kodowane i może być z nimi problem...
Jeśli ktoś ma pomysł jak zmienić moją funkcję, aby prawidłowo zmieniała polskie znaki, będę wdzięczny.
Pozdrawiam Jerry.
Użytkownik Jerry(aburn) edytował ten post 02 styczeń 2009, 16:04
No dobra ziomki.
Nikt mi tu nie pomógł... Ale wyskakujecie dość często w Googlach... więc może jeszcze jakiś, ktosiek będzie miał ten problem i żeby oszczędzić mu tych pare dni szukania wrzucam coś na co się natknąłem.
Zanim jednak przejdę do szerszego wytłumaczenia, podam gotowy kod, który wystarcza chwilowo do moich potrzeb, jednak nie będzie on już używany, ponieważ znalazłem lepsze rozwiązanie.
wchar_t *wide_char(char *text) { wchar_t *nText = NULL; int size, wsize; size = strlen(text) + 1; wsize = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, text, size, nText, 0); nText = (wchar_t *) calloc(wsize, sizeof(wchar_t)); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, text, size, nText, wsize); return nText; }
Pierwszy argument funkcji MultiByteToWideChar to flaga strony kodowej i właśnie dzięki tej fladze możemy uzyskać prawidłowe kodowanie polskich znaków.
Więcej info na Dokumentacji MSDN - http://msdn.microsof...413(VS.85).aspx
BTW - Funkcja zwraca wskaźnik do tablicy szerokich znaków, utworzonej przez konwersję wejściowego tekstu.
Teraz jeśli chodzi o lepsze rozwiązanie, nie będę się rozwodził za bardzo również, ale urzywanie typu TCHAR wygląda na najlepsze rozwiązanie, gdyż jest on zdefiniowane tak aby przy kompilacji wybierać między kodowaniem ASCII a UNICODE (ech te wchar_t).
I jeszcze jedno
w VisualStudio jest opcja wyboru między MultiByte a UNICODE
o tutaj :D
http://e.imagehost.o...179/charset.jpg
Pozdro ziomy... niepomagajcie nikomu to daleko zajdziecie ;)
Użytkownik Jerry(aburn) edytował ten post 02 styczeń 2009, 16:11
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Grzebałem sporo w Googlach i na sporej ilości różnych forum internetowych.
Problem jest następujący, potrzeba konwersji ciągu znaków char na lpcwstr.
Znalazłem częściowe rozwiązanie w postaci funkcji mbstowcs()
wchar_t *wide_char(char *text) { wchar_t *nText = NULL; int size; size = strlen(text) + 1; nText = (wchar_t *)malloc(sizeof(wchar_t)*size); mbstowcs(nText, text, size); return nText; }
Jednak przy próbie konwersji polskich znaków zaczynają się schody.
Przeczytałem gdzieś, są one inaczej kodowane i może być z nimi problem...
Jeśli ktoś ma pomysł jak zmienić moją funkcję, aby prawidłowo zmieniała polskie znaki, będę wdzięczny.
Pozdrawiam Jerry.
Użytkownik Jerry(aburn) edytował ten post 02 styczeń 2009, 16:04
No dobra ziomki.
Nikt mi tu nie pomógł... Ale wyskakujecie dość często w Googlach... więc może jeszcze jakiś, ktosiek będzie miał ten problem i żeby oszczędzić mu tych pare dni szukania wrzucam coś na co się natknąłem.
Zanim jednak przejdę do szerszego wytłumaczenia, podam gotowy kod, który wystarcza chwilowo do moich potrzeb, jednak nie będzie on już używany, ponieważ znalazłem lepsze rozwiązanie.
wchar_t *wide_char(char *text) { wchar_t *nText = NULL; int size, wsize; size = strlen(text) + 1; wsize = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, text, size, nText, 0); nText = (wchar_t *) calloc(wsize, sizeof(wchar_t)); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, text, size, nText, wsize); return nText; }
Pierwszy argument funkcji MultiByteToWideChar to flaga strony kodowej i właśnie dzięki tej fladze możemy uzyskać prawidłowe kodowanie polskich znaków.
Więcej info na Dokumentacji MSDN - http://msdn.microsof...413(VS.85).aspx
BTW - Funkcja zwraca wskaźnik do tablicy szerokich znaków, utworzonej przez konwersję wejściowego tekstu.
Teraz jeśli chodzi o lepsze rozwiązanie, nie będę się rozwodził za bardzo również, ale urzywanie typu TCHAR wygląda na najlepsze rozwiązanie, gdyż jest on zdefiniowane tak aby przy kompilacji wybierać między kodowaniem ASCII a UNICODE (ech te wchar_t).
I jeszcze jedno
w VisualStudio jest opcja wyboru między MultiByte a UNICODE
o tutaj :D
http://e.imagehost.o...179/charset.jpg
Pozdro ziomy... niepomagajcie nikomu to daleko zajdziecie ;)
Użytkownik Jerry(aburn) edytował ten post 02 styczeń 2009, 16:11