Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Кодировка

10K
04 августа 2005 года
yaga
12 / / 04.08.2005
Люди, помогите!!!
В моей программе я скачиваю HTML код с разных сайтов, проблема в том, что большинство сайтов написаны в кодировке Windows (с ними проблем не возникает), а некоторые в кодировке KOI-8.
Вопрос:
1)Как распознать кодировку?
2)Как перекодировать переменную CString из KOI-8 в Windows?
406
04 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by yaga
Люди, помогите!!!
В моей программе я скачиваю 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;
}

10K
04 августа 2005 года
yaga
12 / / 04.08.2005
Спасибо за оперативный ответ.
Все заработало!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог