kodowanie UTF-8 polskie znaki

kodowanie UTF-8 polskie znaki
arni077
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 9 lat
0

Witam próbuję stworzyć klienta do IRC, niestety nie mogę wyświetlić polskich znaków.
np. zamiast ciągu znaków: "ążźćńółę azxcnole"
dostaję: "DE<E:DEC3ED azxcnole"
W funkcji dostaję tekst w zmiennej (const UnicodeString AMessage) próbowałem przekonwertować to na wiele sposobów
np. UTF8Decode(AMessage) lecz to nic nie wyświetla, ani jednego znaku.

Prosił bym o podanie mi jakiejś funkcji czy czegoś z czym bym mógł przekonwertować tekst z UnicodeString (UTF-8) do wchar_t z dobrym kodowaniem żeby się polskie znaki wyświetliły np. w kontrolce TMemo.

Z góry dzięki za odpowiedź. Pozdrawiam arni077.

edytowany 1x, ostatnio: arni077
06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0

Pytanie, jakim cudem w UnicodeString dostajesz tekst w utf-8? Bo z tego, co kojarzę, UnicodeString to unikod w kodowaniu systemowym, czyli utf-16 (wchat_t). Chyba że kompilując projekt w trybie ANSI, UnicodeString staje się AnsiStringiem, co byłoby dość dziwne :/

Spróbuj może UTF8ToString.

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około godziny
0

Jaka wersja Buildera? Skoro UnicodeString, to jakaś nowsza. Więc powinno działać wrzucenie tego bezpośrednio do TMemo bez konwersji.

arni077
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 9 lat
0

Azerian pisze w CodeGear C++Builder 2009 ale niestety nie działa wrzucenie bezpośrednio do TMemo bez konwersji bo dostaję wtedy te krzaczki.

0x666 napisał(a)

Pytanie, jakim cudem w UnicodeString dostajesz tekst w utf-8? Bo z tego, co kojarzę, UnicodeString to unikod w kodowaniu systemowym, czyli utf-16 (wchat_t). [...]
Spróbuj może UTF8ToString.

UTF8ToString czy UTF8Decode nie działają i w ogóle tekstu nie wyświetla. IdIRC powinien mi zwracać tekst z takim kodowaniem jakie jest na kanale a jest UTF-8, chyba że się mylę i zwraca w UTF-16, ale mi się wydaje że wtedy chyba powinno się dobrze wyświetlać?? Oczywiście jeśli chce wyświetlić coś ze zmiennej AMessage.w_str(); to tak samo krzaczki dostaję jak i w innych wypadkach.

Oto i te krzaczki :) user image

edytowany 1x, ostatnio: arni077
Azarien
pokaż printscreena tych krzaczków (bez żadnego UTF8cośtam)
06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0

To wygląda jakbyś przypisywał tekst w kodowaniu utf-8 kontrolce pracującej w trybie ansi. Pytanie, czy kontrolka, w której wyświetlasz tekst, jest kontrolką unikodową?

arni077
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 9 lat
0

hmmm czy kontrolka TMemo jest unikodowa to nie wiem chyba powinna być jak mam w całym Builderze ustawione to "_TCHAR maps to" na wchar_t. Chyba że trzeba jeszcze coś zmienić, żeby było wszystko w unicode?

06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0

Tego nie wiem, nie znam nowszych wersji tego środowiska.

Daj tu zrzut pamięci zwróconej przez UnicodeString::data (robisz to oczywiście za pomocą debuggera - podgląd pamięci lub coś w tym stylu), żadnych memo itp.

arni077
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 9 lat
0

Proszę bardzo zrzut o który prosiłeś
user image
Teraz sam zauważyłem że kilka znaków które powinny być na 1 znaku UnicodeStringu są zapisane na 2 znakach. hmmm co tu teraz zrobić żeby te znaki znów połączyć w jeden?? :/

edytowany 1x, ostatnio: arni077
06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0
Kopiuj
const wchar_t* data = (const wchar_t*) AMessage.data();

(...) = UTF8ToString(string(data, data + AMessage.Length()).c_str());

p.s. swoją drogą trzeba być niezłym klocem, żeby tekst w kodowaniu utf-8 przekazywać w tablicy wchar_t[] :/

arni077
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 9 lat
0

Niestety nie działa Twój sposób, w tej zmiennej do której zwraca UTF8ToString dane są identyczne jak w AMessage, czyli nadal te nieszczęsne krzaczki. :/

06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
1

Dopiero teraz przyjrzałem się dokładniej temu tekstowi, jego kodom, i to nie jest tekst w utf-8, ani tym bardziej w utf-16.

ążźćńółę...
utf-8
utf-16
???
Cholera wie co to jest :
arni077
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 9 lat
0

heh to nie dobrze :/ Mi też nic nie przychodzi do głowy :/
może się przyda to co pokazuje sniffer, wysłałem wiadomość o treści: ążźćńó azxcno
w snifferze jest UTF-8
user image
tylko dlaczego tego samego nie ma w tej zmiennej z tym tekstem i chyba już nic nie zrobimy z tym :/.

0x666 chociaż nie rozwiązaliśmy mojego problemu to i tak dzięki wielkie za pomoc. :)

edytowany 1x, ostatnio: arni077

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.