|
|
|
|
Принцип
смены кодировок (Ansi<>OEM). А как можно определить кодировку у текста?
(программно)
Перекодировать можно по разному. 1. Привести текст к windows
кодировке и показать. Для этого можно пользоваться своими процедурами на
основе таблицы перекодирования. Или воспользоваться стандартными WinAPI, но
таких только для DOS <--> Win.
BOOL OemToChar( LPCTSTR lpszSrc, // pointer to string to translate LPSTR lpszDst // pointer to translated string );
Т.е. это что-то вроде: Var p1, p2 : PChar; begin . . . if (CharToOem(p1, p2)) then ...; . . .
В
итоге, в p2 нормальный текст. Одна беда, что все фнукции WinAPI работают с
форматом PChar а не String. Но у Delphi ест ьнабор функций для пребразования
туда обратно. Сам найдешь. И не забывай, что для pchar сначала нужно
выделить память, а потом ее освободить.
2. Использовать нужный шрифт
для показа текста. В этом случае вообще не надо ничего кодировать. Одна
проблема, если этот текст скопировать в буфер обмена и вставить, например в
блокнот, то он вставится не перекодированный. Опять же, для DOS можно исп.
шрифт Terminal. А также есть и шрифты для koi-8 !!! Не в стандартной
поставке windows, но в инете найти можно.
Что касается, определить
кодировку. Это сложно. Обычно для этих целей создается база с наиболее часто
употребляемыми словами и потом текст сравнивается на наличие таких слов.
Например, предлог "как" в кодировке koi-8 выглядит "ЛБЛ". Понятно, что такое
словосочетание вряд ли будет в нормальном тексте (хотя и возможно), отсюда
можно заключить, что это текст в кодировке koi-8.
Для koi-8, еще
можно исп. тот факт, что все маленькие буквы становятся большими, а большие
маленькими. Т.е. все предложения начинаются с маленькой буквы, а дальше
большие, то можно сказать, что это koi-8.
Коментарий: Сергей Истомин
если есть уверенность в том, что кодировка либо OEM
либо ANSII, то определить OEM можно по наличию в тексте некоторых символов,
которых нет в ANSII:
if(byte>=0x80 && byte<=0xA7)
return OEM; if(byte>=0xA9 && byte<=0xAF) return OEM;
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|