Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Контентный плагин для определения кодировки текстовых файлов
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Lamer



Joined: 20 Mar 2006
Posts: 522

Post (Separately) Posted: Wed Oct 25, 2006 18:43    Post subject: Контентный плагин для определения кодировки текстовых файлов Reply with quote

Какой из существующих плагинов можно приспособить для этой цели?
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Wed Oct 25, 2006 19:07    Post subject: Reply with quote

Afaik - никакой. Но если есть алгоритм определения кодировки (они точно есть, лень искать) - накатать плаг очень просто.
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
Lamer



Joined: 20 Mar 2006
Posts: 522

Post (Separately) Posted: Wed Oct 25, 2006 22:57    Post subject: Reply with quote

D1P wrote:
Afaik - никакой. Но если есть алгоритм определения кодировки (они точно есть, лень искать) - накатать плаг очень просто.


Ясненько. Спасибо.
Back to top
View user's profile Send private message
Моторокер



Joined: 06 May 2005
Posts: 1517
Location: г. Пермь (читается Перьмь)

Post (Separately) Posted: Thu Oct 26, 2006 07:55    Post subject: Reply with quote

Вроде на офсайте предлагали как-то улучшить алгоритм определения кодировки в Lister. Подробностей не знаю с моим-то английским.
_________________
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
Back to top
View user's profile Send private message
funduk



Joined: 16 Aug 2005
Posts: 1513
Location: Санкт-Петербург

Post (Separately) Posted: Thu Oct 26, 2006 20:09    Post subject: Reply with quote

Предлагали. Alextp реализовал даже кое-что в своём Universal Viewer. Имхо, можно попытаться его напрячь для плагина =)
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Thu Oct 26, 2006 21:20    Post subject: Reply with quote

Нашёл в инете первый попавшийся алгоритм распознавания кодировки. "На коленке" сварганил плагин: http://super.wincmd.ru/files/WDX_CODE.RAR (исходиник прилагаются).
Распознаётся довольно косо, и только однобайтовые кодировки, да и то далеко не все. Идея, в принципе, интересная - надо делать частотный анализ содержимого файлов. было бы время - занялся вплотную, просто инетерса ради.
Но времени нет и на более стоящие идеи Sad
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
Nik



Joined: 01 Jan 2005
Posts: 583
Location: Киров

Post (Separately) Posted: Thu Oct 26, 2006 22:57    Post subject: Reply with quote

Когда-то я использовал такую функцию (найдена где-то в Сети):

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
View user's profile Send private message
Lamer



Joined: 20 Mar 2006
Posts: 522

Post (Separately) Posted: Sat Oct 28, 2006 02:12    Post subject: Reply with quote

Плагин работает отлично! Очень меня выручил. Спасибо.
Только точности ради хочу отметить, в плане сырцов: в архиве с плагином не хватает самого интересного *.pas (или *.пасов).Наверное, забыл в архив вложить.
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Mon Oct 30, 2006 02:17    Post subject: Reply with quote

Правильный плагин должен не просто распознавать OEM/ANSI/etc, а делать это для файлов на разных языках.
Ибо Частотное распределение символов в ANSI немецких файлах отличается от распределения в ANSI русских...
_________________
UniViewer - CudaText - LogViewer
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Mon Oct 30, 2006 12:41    Post subject: Reply with quote

Quote:
Только точности ради хочу отметить, в плане сырцов: в архиве с плагином не хватает самого интересного *.pas (или *.пасов).Наверное, забыл в архив вложить.

Ты удивишься, но код плагина находится в DPR-файле. Smile
Quote:
Правильный плагин должен не просто распознавать OEM/ANSI/etc, а делать это для файлов на разных языках.
Ибо Частотное распределение символов в ANSI немецких файлах отличается от распределения в ANSI русских...

Также он должен распознавать двубайтные кодировки, все виды юникода, макинтошевские кодировки, плюс, желательно поддерживать подключение кодировок, не "зашитых" в плагин (примерно, как это сделано в wdx_translit).
Было бы интересно этим заняться... но время, время.
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Mon Oct 30, 2006 13:18    Post subject: Reply with quote

Не понял про двухбайтные кодировки. Юникод, что-ли? А чего его распознавать - есть у юникода сигнатуры BOM, по ним о определяем, юникод это или нет. И тип юникода.
_________________
UniViewer - CudaText - LogViewer
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Mon Oct 30, 2006 15:27    Post subject: Reply with quote

Alextp wrote:
есть у юникода сигнатуры BOM, по ним о определяем

А если нет сигнатуры? Хорошая утилита должна определять и в этом случае.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Mon Oct 30, 2006 15:32    Post subject: Reply with quote

По идее, ты прав. Smile Хорошо бы определять и по контенту. Есть даже функция в WinAPI для этого, кажется.
НО: смысл морочиться с определением по контенту, если в подавляющем бол-ве случаев сигнатура *есть* - если сохранишь юникод через Нотепад, то сигнатура там будет наверняка...
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Mon Oct 30, 2006 15:34    Post subject: Reply with quote

Alextp wrote:
если в подавляющем бол-ве случаев сигнатура *есть*

Это ты так думаешь. Very Happy Как раз пару дней назад на работе Джава-Скриптовский движок материли, что нужны JS-файлы в формате UTF-8, а интерпретатор категорически отказывается иметь с ними дело, если там есть сигнатура. Пришлось делать без сигнатуры... Sad
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Mon Oct 30, 2006 16:40    Post subject: Reply with quote

Я про "обычный" юникод, т.е. двухбайтовый...
С UTF-8 действительно сложнее - часто попадаются файлы и с сигнатурами, и без, например xml'и...
_________________
UniViewer - CudaText - LogViewer
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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