Emila23 Opublikowano 21 Listopada 2004 Zgłoś Opublikowano 21 Listopada 2004 Tak jak w temacie interesuje mnie konwersja tablicy znaków z win1250 na utf w języku C++, jeśli ktoś potrafi mi pomóc to prosze o przykład. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 21 Listopada 2004 Zgłoś Opublikowano 21 Listopada 2004 Tak jak w temacie interesuje mnie konwersja tablicy znaków z win1250 na utf w języku C++, jeśli ktoś potrafi mi pomóc to prosze o przykład. Hmmm, nie precyzujesz o co Ci chodzi... Czy: 1. O konwersję pliku? 2. O konwersję stringa w C/C++? 3. Jaki UTF? UTF-8 czy inny? Zastanów się: 4. Co znaczy dla Ciebie "konwersja tablicy znaków"? 5. Formaty kodowań są opisane, czego tak naprawdę potrzebujesz? Wiedzieć tylko jakie kody odpowiadają jakim znakom?? 6. Może biblioteki libiconv (funkcja 'iconv()')? 7. Może wystarczy mbsrtowcs()/wcsrtombs() z 'wchar.h' ?? 8. W jakim środowisku ma to być (system, kompilator). I na koniec mała uwaga: 8. Formatem kodowania jest CP-1250. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 21 Listopada 2004 Zgłoś Opublikowano 21 Listopada 2004 8. W jakim środowisku ma to być (system, kompilator).przeciez dosc wyraznie napisac ze c++ :) mysle ze jedynym slusznym wyjsciem bedzie: [php:1:f2e71ec00f] for(int i=0; i<strlen(tablica_znakow); ++i) { switch(tablica_znakow) { case kod_utf: tablica_znakow = kod_1250; case kod_utfnr2: tablica_znakow = kod_1250nr2; ... itd } } [/php:1:f2e71ec00f] w case wypisujesz kody znakow utf i kazesz zamieniac na kody znakow 1250 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 21 Listopada 2004 Zgłoś Opublikowano 21 Listopada 2004 8. W jakim środowisku ma to być (system, kompilator).przeciez dosc wyraznie napisac ze c++ :) mysle ze jedynym slusznym wyjsciem bedzie: [php:1:223ea76b80] for(int i=0; i<strlen(tablica_znakow); ++i) { switch(tablica_znakow) { case kod_utf: tablica_znakow = kod_1250; case kod_utfnr2; tablica_znakow = kod_1250nr2; ... itd } } [/php:1:223ea76b80] w case wypisujesz kody znakow utf i kazesz zamieniac na kody znakow 1250 Tak, tak i co jeszcze? :? A co to za UTF jest?? Bo np. taki UTF-8 jest kodowany w taki sposób, że jeden znak nie musi wcale zająć 1 bajtu, np. polskie literki o kodach powyżej 0x0100, tylko może to być od 1 do 4 bajtów - jak to w Unicode zresztą... jest 2^31 znaków... A tych Unicode'ów to od cholery jest: UCS-2, UCS-2BE, UCS-2LE, UCS-4, UCS-4LE, UCS-4BE, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE, itd. :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Emila23 Opublikowano 23 Listopada 2004 Zgłoś Opublikowano 23 Listopada 2004 Mój problem dotyczy konwersji stringa z win1250 do UTF8 w środowisku C++ na łindołsie ;). Potrzebuje funkcji [prawdopodobnie jest taka w winapi] która przekonwertuje ciąg znaków w win1250 na UTF8. Prosze o pomoc i pozdrawiam. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 27 Listopada 2004 Zgłoś Opublikowano 27 Listopada 2004 Mój problem dotyczy konwersji stringa z win1250 do UTF8 w środowisku C++ na łindołsie ;). Potrzebuje funkcji [prawdopodobnie jest taka w winapi] która przekonwertuje ciąg znaków w win1250 na UTF8. Jednej funkcji to raczej nie ma... W WinAPI jest funkcja WideCharToMultiByte(), ale ona konwertuje z wide-char (wchar_t) na format wielobajtowy (np. UTF-8 ). Jest też MultiByteToWideChar(), która konwertuje odwrotnie. Łącząc działanie obu można uzyskać konwersję CP-1250 na UTF-8: [php:1:1f25a1b7d9] #include <windows.h> #include <string.h> #include <stdio.h> #include <locale.h> char s[] = "ZaxBFxF3xB3 cixE6n"; int main() { const int wbufsize = 1000; WCHAR wbuffer[ wbufsize ] = {0}; const int mbbufsize = 1000; char mbbuffer[1000]; // najpierw CP-1250 na unicode MultiByteToWideChar( 1250, // strona kodowa 0, // flags s, -1, wbuffer, wbufsize ); setlocale( LC_ALL, "" ); // zeby wprintf dobrze dzialal wprintf( wbuffer ); printf("n"); // z unicode na UTF-8 WideCharToMultiByte( CP_UTF8, 0, wbuffer, -1, mbbuffer, mbbufsize, NULL, NULL ); // wydrukuj w postaci UTF-8, oczywiscie bez dekodowania printf( mbbuffer ); } [/php:1:1f25a1b7d9] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...