Re: [room] Как найти файл в определённой кодировке?

2011-08-24 Thread Денис Черносов
22 августа 2011 г. 15:06 пользователь Alexei V. Mezin <
alexei-me...@rambler.ru> написал:

> 22.08.2011 14:01, Денис Черносов пишет:
>
>
>  1) Есть ли автоматический способ получить список файлов, в cp1251 для
>> (полу)автоматической конвертации в юникод?
>>
>> 2) Аналогичный вопрос про переносы строк в стиле Windows|Unix...
>>
>
> Не так?
>
> [alexei@intel_server tmp]$ file 1251.txt utf.txt
> 1251.txt: ISO-8859 English text, with CRLF line terminators
> utf.txt:  UTF-8 Unicode English text
>
> Нет, эта информация ненадёжная.
find -type f \( -iname '*.php' -and -not -path '*.svn*' \) -exec file -i {}
\;
...
./templates/ui_product_page_caption.php: text/plain charset=iso-8859-1
./templates/ui_product_section.php: text/plain charset=us-ascii
./transport_get.php: text/x-php
./ui_product_element.php: text/plain charset=us-ascii
./usr.php: text/x-php
./usr_js.php: text/x-c charset=utf-8

Никак не кореллирует с реальным положением дел. Например, последние два
файла мною перекодированы в юникод, но второй начинается с "/*" и
определяется им как С-шный.


> Один файл из второго получен путем recode cp1251..utf8.
> __**_
> smoke-room mailing list
> smoke-room@lists.altlinux.org
> https://lists.altlinux.org/**mailman/listinfo/smoke-room




-- 
С уважением,
Черносов Денис
___
smoke-room mailing list
smoke-room@lists.altlinux.org
https://lists.altlinux.org/mailman/listinfo/smoke-room

Re: [room] Как найти файл в определённой кодировке?

2011-08-24 Thread Денис Черносов
22 августа 2011 г. 15:53 пользователь Sergey Korobitsin
написал:

> Денис Черносов ☫ → To Культурный офтопик @ Mon, Aug 22, 2011 14:01 +0400
>
> > Добрый день всем!
> >
> >
> > Есть проект, которые разрабатывался в течение долгого времени самыми
> разными
> > людьми. В нём в хаотичном порядке встречаются файлы в кодировке cp1251
> > (остальные в юникоде).
> >
> > 1) Есть ли автоматический способ получить список файлов, в cp1251 для
> > (полу)автоматической конвертации в юникод?
>
> AFAIR, recode при указании перекодировать cp1251->unicode уже
> unicode-ный файл не тронет (у меня был положительный опыт, но лучше
> попробовать).
>
> > 2) Аналогичный вопрос про переносы строк в стиле Windows|Unix...
>
> Аналогично здесь. AFAIK, все преобразователи делают замену \r\n на \n,
> соответственно юниксный файл будет содержать только \n и заменятор
> заменять ничего не будет. Но вначале всё равно стоит
> поэкспериментировать.
>
>
Поэкспериментировал...
1) вроде бы recode действительно не перекодирует лишнего, но
2) преобразование виндовых разделителей в юниксовые он делать не умеет и
вообще не перекодирует такие файлы:

recode: failed: Ambiguous output in step `CR-LF..data'

Зато iconv их нормально отрабатывает. Но iconv точно пытается перекодироват
файлы, которые уже в юникоде и вылетает по ошибке:

iconv: недопустимая входная последовательность в позиции 1099

Так что вижу выход рекурсивного прохода каталога с помощью recode и второго
прохода файлов, на которых он споткнулся с помощью iconv.

Спасибо всем за участие! Особенно тебе, земляк. ;)

--
> Bright regards, Sergey Korobitsin,
> Chief Research Officer
> Arta Software, http://arta.kz/
> xmpp:underta...@jabber.arta.kz
>
> --
> ...Когда я увидел перед собой перспективу жизни, прожитой так же,
> как живет весь мир, я решил - ни за что, это отвратительно,
> мне будет стыдно самого себя. Если бы я участвовал в поддержке
> этой системы отчужденного, собственнического программирования,
> мне казалось бы, что я делаю мир хуже ради денег.
>  -- Ричард М. Столлман (из интервью)
> ___
> smoke-room mailing list
> smoke-room@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/smoke-room
>



-- 
С уважением,
Черносов Денис
___
smoke-room mailing list
smoke-room@lists.altlinux.org
https://lists.altlinux.org/mailman/listinfo/smoke-room

Re: [room] Как найти файл в определённой кодировке?

2011-08-24 Thread Alexei V. Mezin

24.08.2011 13:57, Денис Черносов пишет:


Нет, эта информация ненадёжная.


Не знаю, есть ли готовое, но google("file charset detection") говорит, что
http://sourceforge.net/projects/chsdet/
http://fredeaker.blogspot.com/2007/01/character-encoding-detection.html
http://www-archive.mozilla.org/projects/intl/detectorsrc.html

и даже есть теория
http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html
___
smoke-room mailing list
smoke-room@lists.altlinux.org
https://lists.altlinux.org/mailman/listinfo/smoke-room

Re: [room] Как найти файл в определённой кодировке?

2011-08-24 Thread Alexei V. Mezin

24.08.2011 14:04, Денис Черносов пишет:


2) преобразование виндовых разделителей в юниксовые он делать не умеет и
вообще не перекодирует такие файлы:

recode: failed: Ambiguous output in step `CR-LF..data'



Для этого есть ключ -f

С последующим прогоном recode /CR (или /LF, надо в man уточнить), 
который уберет лишние символы там, где они есть.

___
smoke-room mailing list
smoke-room@lists.altlinux.org
https://lists.altlinux.org/mailman/listinfo/smoke-room

Re: [room] Как найти файл в определённой кодировке?

2011-08-24 Thread Aleksey Avdeev
24.08.2011 14:04, Денис Черносов пишет:
> 
> 
> 22 августа 2011 г. 15:53 пользователь Sergey Korobitsin
> mailto:underta...@arta.kz>> написал:
> 
> Денис Черносов ☫ → To Культурный офтопик @ Mon, Aug 22, 2011 14:01 +0400
> 
...
> 
> > 2) Аналогичный вопрос про переносы строк в стиле Windows|Unix...
> 
> Аналогично здесь. AFAIK, все преобразователи делают замену \r\n на \n,
> соответственно юниксный файл будет содержать только \n и заменятор
> заменять ничего не будет. Но вначале всё равно стоит
> поэкспериментировать.
> 
> 
> Поэкспериментировал...
> 1) вроде бы recode действительно не перекодирует лишнего, но
> 2) преобразование виндовых разделителей в юниксовые он делать не умеет и
> вообще не перекодирует такие файлы:
> 
> recode: failed: Ambiguous output in step `CR-LF..data'

  dos2unix (из пакета hd2u)?

-- 

С уважением. Алексей.




signature.asc
Description: OpenPGP digital signature
___
smoke-room mailing list
smoke-room@lists.altlinux.org
https://lists.altlinux.org/mailman/listinfo/smoke-room

Re: [room] Как найти файл в определённой кодировке?

2011-08-24 Thread Andrew Borodin
On Wed, Aug 24, 2011 at 02:14:39PM +0400, Alexei V. Mezin wrote:
> 24.08.2011 14:04, Денис Черносов пишет:

> С последующим прогоном recode /CR (или /LF, надо в man 
> уточнить), который уберет лишние символы там, где они есть.

Думаю, что

tr -d '\r'

будет быстрее.

-- 

С уважением
А. Бородин.
___
smoke-room mailing list
smoke-room@lists.altlinux.org
https://lists.altlinux.org/mailman/listinfo/smoke-room

Re: [room] Как найти файл в определённой кодировке?

2011-08-24 Thread Sergey Korobitsin
Денис Черносов ☫ → To Культурный офтопик @ Wed, Aug 24, 2011 14:04 +0400

> Поэкспериментировал...
> 1) вроде бы recode действительно не перекодирует лишнего, но
> 2) преобразование виндовых разделителей в юниксовые он делать не умеет и
> вообще не перекодирует такие файлы:
> 
> recode: failed: Ambiguous output in step `CR-LF..data'
> 
> Зато iconv их нормально отрабатывает. Но iconv точно пытается перекодироват
> файлы, которые уже в юникоде и вылетает по ошибке:
> 
> iconv: недопустимая входная последовательность в позиции 1099
> 
> Так что вижу выход рекурсивного прохода каталога с помощью recode и второго
> прохода файлов, на которых он споткнулся с помощью iconv.

Можно сделать в три этапа:
1. Прогоняем каталоги dos2unix (или аналогичной штукой, tr например)
   Результат: имеем все файлы в UNIX-кодировке

2. Натравливаем на готовые файлы. В идеале оно должно пройти без ошибок.
   Если ошибки всё-таки есть, то смотрим, что произошло и при
   необходимости натравливаем iconv

> Спасибо всем за участие! Особенно тебе, земляк. ;)

Пожалуйста! Меня тоже напрягают файлы не в unicode и не в
unix-line-endings. При попытке работать с такими с помощью while; read,
awk, да почти всеми текстовыми утилитами, начинается такая катавасия,
что боже упаси.

-- 
Bright regards, Sergey Korobitsin,
Chief Research Officer
Arta Software, http://arta.kz/
xmpp:underta...@jabber.arta.kz

--
Пифагоровы штаны Лобачевскому смешны
 -- 
___
smoke-room mailing list
smoke-room@lists.altlinux.org
https://lists.altlinux.org/mailman/listinfo/smoke-room