|
93 Как сделать автораспознование кодировок текста (WIN,DOS) ?
Я встретил где-то инфу о том, что надо считать букву 'o' и сделал так:
//---------------------------------------------------------------------------
// Определяем кодировку, возвращаем 1 - если DOS, 2 - если WIN
// Считаем кол-во букв "о" в обеих кодировках
//---------------------------------------------------------------------------
int __fastcall TMainForm::what_codepage(std::vector<std::string> in)
{
int win_count=0, dos_count=0;
for(size_t j=0; j<in.size(); j++)
for(size_t i=0; i<in[j].size(); i++)
switch (in[j][i]) {
// 174 - русская "о" в DOS кодировке
case 174:
dos_count++;
break;
// 238 - русская "о" в WIN кодировке
case 238:
win_count++;
break;
default :
break;
}
if(win_count > dos_count)
return 2;
return 1;
}
Maksim Pozdeyev 2:5090/67.6
Бывает... Я бы сделал по-другому.
what_codepage(unsigned char * data, int data_size)
{
bool RetValue;
int * Statistic = (int *)calloc(256, sizeof(int)); // с обнулением
for ( int i = 0, i < data_size; ++i)
{
++Statistic[data[i]];
}
RetValue = Statistic[174] > Statistic[238];
free(Statistic);
return RetValue;
}
P.S. Для больших data_size не обязательно читать весь текст.
Andrey Belyakov
Предыдущий вопрос
|
|
Следующий вопрос
источник
by jenyok
|
|
|