Кодировка
В моей программе я скачиваю HTML код с разных сайтов, проблема в том, что большинство сайтов написаны в кодировке Windows (с ними проблем не возникает), а некоторые в кодировке KOI-8.
Вопрос:
1)Как распознать кодировку?
2)Как перекодировать переменную CString из KOI-8 в Windows?
Люди, помогите!!!
В моей программе я скачиваю HTML код с разных сайтов, проблема в том, что большинство сайтов написаны в кодировке Windows (с ними проблем не возникает), а некоторые в кодировке KOI-8.
Вопрос:
1)Как распознать кодировку?
2)Как перекодировать переменную CString из KOI-8 в Windows?
В html странице обычно пишется в заголовке какая кодировка используется,например <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
Можно использовать следующие функции кодирующие с koi8-r to win1251 и обратно:
bool Encode_Win1251ToKoi8r(char* in_str,int len_in_str,char* out_str,int *len_out_str)
{
BYTE max_ch=168;
BYTE str_abc[]="і©Є«¬_®Ї°±Ііґµ¶·Ј№є»јЅѕїбвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС";
if(in_str==0 || len_in_str==0 || out_str==0 || len_out_str==0 || *len_out_str<=0) return 0;
if(*len_out_str<len_in_str) { *len_out_str=len_in_str; return 0;}
BYTE val;
for(int i=0;i<len_in_str;i++)
{
val=(BYTE)in_str;
if(val>=max_ch)
out_str=str_abc[val-max_ch];
else out_str=in_str;
}
*len_out_str=len_in_str;
return 1;
}
bool Encode_Koi8rToWin1251(char* in_str,int len_in_str,char* out_str,int *len_out_str)
{
BYTE max_ch=168;
char str_abckoi[]="і©Є«¬_®Ї°±Ііґµ¶·Ј№є»јЅѕїбвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС";
char str_abc[]= "Ё©Є«¬_®Ї°±ІЁґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя";
BYTE len=88;
if(in_str==0 || len_in_str==0 || out_str==0 || len_out_str==0 || *len_out_str<=0) return 0;
if(*len_out_str<len_in_str) { *len_out_str=len_in_str; return 0;}
BYTE val;
for(int i=0;i<len_in_str;i++)
{
val=(BYTE)in_str;
if(val>=max_ch)
{
for(BYTE i1=0;i1<len;i1++)
{
if(str_abckoi[i1]==in_str)
{
out_str=str_abc[i1];
break;
}
}
}
else out_str=in_str;
}
*len_out_str=len_in_str;
return 1;
}
Все заработало!