CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Zmiana kodowania z UTF-8 to CP1250 / poprawność kodu
Strona 1 z 1

Zmiana kodowania z UTF-8 to CP1250 / poprawność kodu

Nowy postNapisane: piątek, 26 listopada 2010, 17:17
przez Darek_C++
Szukając rozwiązania dla problemu opisanego w topicku :
viewtopic.php?f=16&t=1014&start=0&hilit=Utf8ToAnsi
który dla przypomnienia problem polegał na tym, że funkcja Utf8ToAnsi() dla kodu pewnych stron www które deklarują się jako UTF-8 nie działała prawidłowo np:
http://www.serwisdom.pl/finanse-i-ubezp ... dkowe.html
znalazłem taki kod prototypowy:

KOD cpp:     UKRYJ  
WCHAR* buff = new WCHAR[(int)src.length()+1];
char* buff2 = new char[1024];

memset(buff,0,sizeof(WCHAR)*((int)src.length()+1));
memset(buff2,0,sizeof(char)*1024);

MultiByteToWideChar(CP_UTF8,0,src.c_str(),(int)src.length(),buff,(int)src.length()+1);
WideCharToMultiByte(1250,0,buff,(int)src.length(),buff2,(int)src.length(),NULL,NULL);
który ze względu [jak sadze] na zbyt mały rozmiar bufora char[1024]; się, wysypywał więc przepisałem go na taki kod:

KOD cpp:     UKRYJ  
String  ConvertUTFto1250(String input)
{
        try
        {
                int rozmiar = input.Length();
                WCHAR* buff = new WCHAR[(int)input.Length()+1];
                char* buff2 = new char[rozmiar];
                memset(buff,0,sizeof(WCHAR)*((int)input.Length()+1));
                memset(buff2,0,sizeof(char)*rozmiar);

                MultiByteToWideChar(CP_UTF8,0,input.c_str(),(int)input.Length(),buff,(int)input.Length()+1);
                WideCharToMultiByte(1250,0,buff,(int)input.Length(),buff2,(int)input.Length(),NULL,NULL);

                String temp = (String)buff2;
                delete[]buff;
                delete[]buff2;

                return temp.Trim();

        }
        catch (...)
        {
                return "BLAD";
        }
}


Kod działa w TMemo są polskie znaki...
Pytanie brzmi czy jest prawidłowy jak chodzi o dynamiczny przydział pamięci ?