![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить кодировку строчки [D7, 95/98, XP]
abhtr © (2008-12-17 16:00:00)Приходит текстовый файл с закодированным текстом.
Шапка этого файла содержит обычный текст, но с разной кодировкой.
Иногда 866, иногда win1251
Как можно определить кодировку этой строки, чтобы представлять ее в любом случае читабельной?
Пробовал KodSimbol := GetOEMCP;
но получается всегда 866
А если просматриваю Far-om, то получается видеть этот текст обычным переключением по F8
Правильный$Вася (2008-12-17 18:03:00) [1]
> если просматриваю Far-om
у него есть частотные списки кодов для текстов на разных языках/кодировках
поэтому часто угадывает
тут смотри "C:\Program Files\Far\Addons\Tables\Russian"
Anatoly Podgoretsky (2008-12-17 17:20:00) [2]Если есть коды в диапазоне 128-191 то 866
Медвежонок Пятачок (2008-12-17 17:13:00) [3]Шапка этого файла содержит обычный текст, но с разной кодировкой.
Тупо Pos()
Если не совпало, значит в oem
clickmaker (2008-12-17 16:05:00) [4]> Как можно определить кодировку этой строки
если интересует именно автоопределение, то анализом некоторой части текста. Чем больше кусок, тем точнее.
например, так
function IsOem(pbBuff: PByteArray; cb: integer): boolean;
const
Codes: array[0..9] of byte = (166, 161, 174, 175, 169, 176, 178, 179, 172, 164);
var
i, j: integer;
begin
for i := 0 to cb - 1 do
begin
if (pbBuff[i] = 0) then break;
for j := 0 to 9 do
begin
if (pbBuff[i] = Codes[j]) then
begin
Result := true;
exit;
end;
end;
end;
Result := false;
end;
Преобразовать - OemToChar
Сергей М. (2008-12-17 16:04:00) [5]
> если просматриваю Far-om, то получается видеть этот текст
> обычным переключением по F8
При этом работает "определялка", зашитая в твоей голове - если, мол, я вижу крякозябры, дай-ка я попробую жмакнуть F8, авось увижу желаемое.
> Шапка этого файла
Что есть "шапка файла" ?