View previous topic :: View next topic |
Author |
Message |
Lamer
Joined: 20 Mar 2006 Posts: 522
|
(Separately) Posted: Wed Oct 25, 2006 18:43 Post subject: Контентный плагин для определения кодировки текстовых файлов |
|
|
Какой из существующих плагинов можно приспособить для этой цели? |
|
Back to top |
|
|
D1P
Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Wed Oct 25, 2006 19:07 Post subject: |
|
|
Afaik - никакой. Но если есть алгоритм определения кодировки (они точно есть, лень искать) - накатать плаг очень просто. _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
|
Lamer
Joined: 20 Mar 2006 Posts: 522
|
(Separately) Posted: Wed Oct 25, 2006 22:57 Post subject: |
|
|
D1P wrote: | Afaik - никакой. Но если есть алгоритм определения кодировки (они точно есть, лень искать) - накатать плаг очень просто. |
Ясненько. Спасибо. |
|
Back to top |
|
|
Моторокер
Joined: 06 May 2005 Posts: 1517 Location: г. Пермь (читается Перьмь)
|
(Separately) Posted: Thu Oct 26, 2006 07:55 Post subject: |
|
|
Вроде на офсайте предлагали как-то улучшить алгоритм определения кодировки в Lister. Подробностей не знаю с моим-то английским. _________________ плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми |
|
Back to top |
|
|
funduk
Joined: 16 Aug 2005 Posts: 1513 Location: Санкт-Петербург
|
(Separately) Posted: Thu Oct 26, 2006 20:09 Post subject: |
|
|
Предлагали. Alextp реализовал даже кое-что в своём Universal Viewer. Имхо, можно попытаться его напрячь для плагина =) |
|
Back to top |
|
|
D1P
Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Thu Oct 26, 2006 21:20 Post subject: |
|
|
Нашёл в инете первый попавшийся алгоритм распознавания кодировки. "На коленке" сварганил плагин: http://super.wincmd.ru/files/WDX_CODE.RAR (исходиник прилагаются).
Распознаётся довольно косо, и только однобайтовые кодировки, да и то далеко не все. Идея, в принципе, интересная - надо делать частотный анализ содержимого файлов. было бы время - занялся вплотную, просто инетерса ради.
Но времени нет и на более стоящие идеи _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
|
Nik
Joined: 01 Jan 2005 Posts: 583 Location: Киров
|
(Separately) Posted: Thu Oct 26, 2006 22:57 Post subject: |
|
|
Когда-то я использовал такую функцию (найдена где-то в Сети):
Code: |
unit xlat;
interface
uses Windows,Sysutils;
type
XCharSet=(koi,win,dos);
function AutoCode(var st:string):XCharSet;
implementation
type
TArrayByte=array[byte]of byte;
const
Win_:array[0..127]of byte=($C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF,$D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF,$E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF,$80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F,$90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F,$A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A9,$AA,$AB,$AC,$AD,$AE,$AF,$B0,$F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF,$A8,$B8,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B9,$BA,$BB,$BC,$BD,$BE,$BF);
Koi_:array[0..127]of byte=($E1,$E2,$F7,$E7,$E4,$E5,$F6,$FA,$E9,$EA,$EB,$EC,$ED,$EE,$EF,$F0,$F2,$F3,$F4,$F5,$E6,$E8,$E3,$FE,$FB,$FD,$FF,$F9,$F8,$FC,$E0,$F1,$C1,$C2,$D7,$C7,$C4,$C5,$D6,$DA,$C9,$CA,$CB,$CC,$CD,$CE,$CF,$D0,$90,$91,$92,$81,$87,$B2,$B4,$A7,$A6,$B5,$A1,$A8,$AE,$AD,$AC,$83,$84,$89,$88,$86,$80,$8A,$AF,$B0,$AB,$A5,$BB,$B8,$B1,$A0,$BE,$B9,$BA,$B6,$B7,$AA,$A9,$A2,$A4,$BD,$BC,$85,$82,$8D,$8C,$8E,$8F,$8B,$D2,$D3,$D4,$D5,$C6,$C8,$C3,$DE,$DB,$DD,$DF,$D9,$D8,$DC,$C0,$D1,$B3,$A3,$99,$98,$93,$9B,$9F,$97,$9C,$95,$9E,$96,$BF,$9D,$94,$9A);
Dos_:array[0..127]of byte=($80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F,$90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F,$A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF,$B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF,$C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF,$D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF,$E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF,$F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF);
var table:TArrayByte;
function AutoCode(var st:string):XCharSet;
var s1,s2,s3:dword;i:integer;
begin
if st='' then result:=win else begin
s1:=0;s2:=0;s3:=0;
for i:=1 to length(st) do case byte(st[i]) of
192,200,206,210,224,232,238,242:inc(s1);
193,201,207,212,225,233,239,244:inc(s2);
128,136,142,146,160,168,174,226:inc(s3);
end;
if s1<s3 then if s3<s2 then result:=koi else result:=dos else if s1<s2 then result:=koi else result:=win
end;
end;
end.
|
_________________ Качественный хостинг. |
|
Back to top |
|
|
Lamer
Joined: 20 Mar 2006 Posts: 522
|
(Separately) Posted: Sat Oct 28, 2006 02:12 Post subject: |
|
|
Плагин работает отлично! Очень меня выручил. Спасибо.
Только точности ради хочу отметить, в плане сырцов: в архиве с плагином не хватает самого интересного *.pas (или *.пасов).Наверное, забыл в архив вложить. |
|
Back to top |
|
|
Alextp
Joined: 06 Feb 2005 Posts: 4957
|
(Separately) Posted: Mon Oct 30, 2006 02:17 Post subject: |
|
|
Правильный плагин должен не просто распознавать OEM/ANSI/etc, а делать это для файлов на разных языках.
Ибо Частотное распределение символов в ANSI немецких файлах отличается от распределения в ANSI русских... _________________ UniViewer - CudaText - LogViewer
|
|
Back to top |
|
|
D1P
Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Mon Oct 30, 2006 12:41 Post subject: |
|
|
Quote: | Только точности ради хочу отметить, в плане сырцов: в архиве с плагином не хватает самого интересного *.pas (или *.пасов).Наверное, забыл в архив вложить. |
Ты удивишься, но код плагина находится в DPR-файле.
Quote: | Правильный плагин должен не просто распознавать OEM/ANSI/etc, а делать это для файлов на разных языках.
Ибо Частотное распределение символов в ANSI немецких файлах отличается от распределения в ANSI русских... |
Также он должен распознавать двубайтные кодировки, все виды юникода, макинтошевские кодировки, плюс, желательно поддерживать подключение кодировок, не "зашитых" в плагин (примерно, как это сделано в wdx_translit).
Было бы интересно этим заняться... но время, время. _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
|
Alextp
Joined: 06 Feb 2005 Posts: 4957
|
(Separately) Posted: Mon Oct 30, 2006 13:18 Post subject: |
|
|
Не понял про двухбайтные кодировки. Юникод, что-ли? А чего его распознавать - есть у юникода сигнатуры BOM, по ним о определяем, юникод это или нет. И тип юникода. _________________ UniViewer - CudaText - LogViewer
|
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Mon Oct 30, 2006 15:27 Post subject: |
|
|
Alextp wrote: | есть у юникода сигнатуры BOM, по ним о определяем |
А если нет сигнатуры? Хорошая утилита должна определять и в этом случае. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
Alextp
Joined: 06 Feb 2005 Posts: 4957
|
(Separately) Posted: Mon Oct 30, 2006 15:32 Post subject: |
|
|
По идее, ты прав. Хорошо бы определять и по контенту. Есть даже функция в WinAPI для этого, кажется.
НО: смысл морочиться с определением по контенту, если в подавляющем бол-ве случаев сигнатура *есть* - если сохранишь юникод через Нотепад, то сигнатура там будет наверняка... |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Mon Oct 30, 2006 15:34 Post subject: |
|
|
Alextp wrote: | если в подавляющем бол-ве случаев сигнатура *есть* |
Это ты так думаешь. Как раз пару дней назад на работе Джава-Скриптовский движок материли, что нужны JS-файлы в формате UTF-8, а интерпретатор категорически отказывается иметь с ними дело, если там есть сигнатура. Пришлось делать без сигнатуры... _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
Alextp
Joined: 06 Feb 2005 Posts: 4957
|
(Separately) Posted: Mon Oct 30, 2006 16:40 Post subject: |
|
|
Я про "обычный" юникод, т.е. двухбайтовый...
С UTF-8 действительно сложнее - часто попадаются файлы и с сигнатурами, и без, например xml'и... _________________ UniViewer - CudaText - LogViewer
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|