Skocz do zawartości
Emila23

Konwersja z win1250 na utf

Rekomendowane odpowiedzi

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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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. :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...