[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: перевод файлов в UTF-8
RoDen
случайно не попадалась ли кому программка (под венду) для пакетного перевода файлов в UTF-8 из других кодировок?

я такую программу нашел в конце прошлого года (точно помню), а потом протерял куда-то и найти не могу, и название вспомнить не могу.

плиз, очень надо!

P.S. iconv не предлагать.
michael
Цитата
P.S. iconv не предлагать.


даже под cygwin?
sensey
Код


#!/usr/bin/env python
import os
import codecs

idir = 'c:/in/'
odir = 'c:/out/'

ienc = 'cp1251'
oenc = 'utf-8'

list = filter( lambda x: os.path.isfile( idir + x ), os.listdir( idir ))

for e in list:
       fi = codecs.open( idir + e, 'r', ienc)
       fo = codecs.open( odir + e, 'w', oenc)
       fo.write( fi.read() )




Вот маленькая программка на питоне. Тестировал под виндой - проблем не замечено.
Комеентарии, думаю излишни.

З.Ы.
Думаю, можно сделать аналогичную и на пых-пыхе, но не мастак.
sensey
Однако, такие задачи следует решать инструментальным способом.
Вот пример кода на языке bash.

Код


for i in `ls /path/in/*.txt`;
   do iconv -f cp1251 -t utf8 $i > $i."utf8";
   mv $i."utf8" $i;
done



Один инструмент - ls - перечисляет объекты, а другой - iconv - только конвертирует.
Таким образом, соблюдается правило прозрачности и система остается разложимой
на элементарные компоненты, что упрощает ее анализ и аудит.

Заметим, что все эти инструменты: ls, iconv, mv, bash - стандартизированы,
следовательно дополнительных программ устанавливать не надо.
sensey
Цитата (RoDen)
P.S. iconv не предлагать.


И что только люди не придумают чтобы не использовать Unix

З.Ы.
установщик питона под винду можно найти на www.python.org
sensey
Параметризованная версия утилиты

Код

#!/usr/bin/env python
import os
import sys
import codecs
import re

p={}
for a in sys.argv:
   m = re.search('([\w]*)=([-.:\w/"\"]*)', a)
   if m is not None:
       p[m.group(1)]=m.group(2)

list = filter( lambda x: os.path.isfile( p['in'] + x ), os.listdir( p['in'] ))

for e in list:
   print p['in'] + e + ' ---> ' + p['out'] + e
   fi = codecs.open( p['in'] + e, 'r', p['f'])
   fo = codecs.open( p['out'] + e, 'w', p['t'])
   fo.write( fi.read() )


Пример использования:
Код

conv.py in=c:/in/ out=c:/out/ f=cp1251 t=utf-8


Сгенерировал exe-ник под винду.
sensey
Однако выгрузить не получается. Выдается сообщение:
"""
ОБНАРУЖЕНЫ СЛЕДУЮЩИЕ ОШИБКИ
Вы не можете загружать такой тип файлов
"""
michael
Цитата
Вы не можете загружать такой тип файлов


положи на ifolder.ru
sensey
текст_программы
дистрибутив( требует python )


Интерпретатор python можно скачать здесь: python-2.5.2_win32_installer
sensey
Оказывается существуют сборки iconv под win32, например, в графическом редакторе GIMP.

Таким образом, пользователи win32 могут тоже воспользоваться этой замечательной утилитой и конвертировать тексты из одной произвольной кодировки в другую.

Вот код, адаптированный для windows:
Код

for i in `ls c:/pfiles/bash/in/*.txt`;
do
  ./iconv.exe -f cp1251 -t utf-8 $i > $i."utf8"
  mv $i."utf8" $i
done


Коммент:
Ключ -f задает исходную кодировку, ключ -t - конечную.

Комплект состоящий из интерпретатора bash, конвертора iconv а так же самого сценария и пуcкового батника можно скачать здесь:

bash+iconv (win32)

Результат получился даже несколько компактнее чем в предыдущем случае.

ЗЫ
Только будьте осторожны, делайте резервные копии конвертируемых текстов.
ЗЫЗЫ
Приведенные выше примеры программного кода наглядно демонстрируют
неоспоримые преимущества применения специализа
RoDen
sensey
спасибо за ответы!
я с iconv не работал пока, по сображениям лени и религиозным тоже.
ты скажи, он без BOM может перекодировать?


собственно, из того что я нашел под венду:
Tea(Win32). чудный текстовый редактор, который при весе в 1 мегабайт умеет даже открывать формат OpenOffice (ридонли), ну и кучу всего-всего умеет.
имеет сотни функций по обработке текста - сортировка, создание словарей, анализ текста, фильтрация, массовое изменение кодировок, запуск внешних программ и многое другое. недостаток - нельзя оперировать BOM-заголовками.

Kaboom - отличный перекодировщик, поддерживает массовое перекодирование файлов, которые перетащили в его окно. На паре текстовых файлов у меня почему-то сглючил, зараза - не перевел в юникод...

Textpipe - программа имеет больше сотни гибко настраиваемых фильтров замены и перекодировки. Платная. Про BOM я не нашел, подозреваю что не умеет.

PS вот как вы относитесь у UTF-8?
я лично видел два противоположных мнения:
1) плохо. php с ним не работает без геморроя, весит в два раза больше, глючит часто из-за BOM
2) хорошо! мультиязычность же!
sensey
Цитата (RoDen)
ты скажи, он без BOM может перекодировать?


Да, может - для этого надо указать порядок следования байтов.

Примеры конвертирования:

1. Исходный порядок от младшего к старшему:
Код

iconv -f UTF-16LE -t UTF-8 input.txt > output.txt


2. Исходный порядок от старшего к младшему:
Код

iconv -f UTF-16BE -t UTF-8 input.txt > output.txt


Туда и обратно конвертирует, и без вcяких BOM-ов.
Iconv старейшая утилита и какие можно глюки в ней выловили.
Лучший выбор для пакетной конвертации.

sensey
Что касается прикладных аспектов utf-8, то я не стану отрицать неготовность некоторого ПО (читай php) к использованию данного стандарта. Плюс до недавнего момента существовала проблема медленной сортировки UTF-строк в системе FreeBSD.


Но, на мой взгляд, у utf-8 есть неоспоримое приемущество - не надо думать о кодировках.

А что касается размера, то при применении компрессии файл в utf-кодировке и файл в традиционной кодировке не сильно будет отличаться по размеру, ведь количество информации останется неизменным.

Да и к тому же на на современных http-серверах есть модуль аля mod_gzip, делающий процесс компрессии текстовых потоков прозрачным и сводящий к минимуму сетевые задержки.


В стане пропонентов юникодизации есть такие гиганты как Google, IBM, Sun, MS, Adobe.
Любой их продукт полагается на юникод.

Возьмите любой стандарт документооборота, будь то ISO 32000 - PDF или ISO 26300
- ODF и вы увидите там юникод.



IMHO, в долгосрочной перспективе юникод выиграет и сопротивляться бесполезно.

sensey
Цитата (RoDen)
я с iconv не работал пока, по сображениям лени и религиозным тоже.


А ты попробуй назло собственной лени.

А так, да, лень штука полезная, если она конструктивна.
Один китайский философ сказал, что когда умный человек воздерживается от действия, то могущество его чувствуется за сотни миль.
Нежелание выполнять ненужную работу считается великой добородетелью у программистов.
В этом ключ автоматизации.

Но лень может быть и деструктивной. Это проявляется не сразу, и только по прошествии времени осознаешь свою неправоту. Например, некоторые программисты пребывают в ловушке ручного труда.
Парадокс - им лень автоматизировать рутину, но не лень идти у нее на поводу.
sensey
Вчера на сайте IBM была опубликована статья, посвященная использованию юникода в языке программирования `php`:
http://www.ibm.com/developerworks/ru/libra...code/index.html

Надо отметить, что php{4,5} работает только с ascii-символами.
Полноценная поддержка будет только в версии 6.

дед_мажор
Цитата (sensey)
Вчера на сайте IBM была опубликована статья

с осени прошлого года еще висит.

статья полубредовая, ибо у автор явно не в теме.

он не знаком с таким понятием, как локаль.
а судя по примерам кода, он не знает, что такое юникодный редактор.
кроме того, он не знает, как с обычной клавиатуры вводить юникодные символы («…» например он задает как "…").
символ — он и есть символ, и при чем тут html-entities — ни разу не понятно.

в общем, сгодится для тех, кто первый раз слышит слово unicode.
sensey
Некоторые строковые/библиотечные функции php{4,5} неверно работают с многобайтными кодировками.
Вот обзор некоторых проблем

Цитата

    *
      Handling UTF-8 with PHP
          o
            UTF-8 "Dangerous" PHP Functionality
                +
                  The PCRE Extension
                +
                  The String Extension
                +
                  Array Extension
                +
                  Mail Functions
                +
                  Variables Handling
                +
                  XML Extension (SAX)
                +
                  XML DOM Extension
                +
                  URL Functions
                +
                  GD Extension
                +
                  exif extension
          o
            UTF-8 Safe Functionality
                +
                  explode
                +
                  str_replace


Как видно из перечисления, большинство функционала так или иначе связанного с обработкой строк ведут себя некорректно по отношению к UTF и их применение небезопасно.
дед_мажор
sensey
ахуенная новость!

Last modified: 2006/12/09

где ты ее столько времени прятал??
sensey
Хотелось бы увидеть чейнджлоги того что изменилось с тех пор в плане UTF.
Разумеется, пруфлинки в студию!
дед_мажор
sensey
воспользуйтесь официальной документацией на php.net и списком рассылки php.internals.
sensey
2 Major

Не собираюсь пользоваться/изучать это чудо. Просто презабавно иногда слышать о его нелепых проблемах.
PS. Я для себя сделал выбор в пользу Пайтона.
дед_мажор
Цитата (sensey)
Не собираюсь пользоваться/изучать это чудо.

ваше право.
зачем тогда вы лезете сюда со своими идиотскими статейками? показывать свою безграмотность?
в этом вы всех уже давно убедили.
sensey
2 Мажор
Насчет безграмотности - так это батенька лень, а не безграмотность. Вопрос то был пустяковый, и задал я его чисто из праздного любопытства. А вы нет бы да просвещению поспособствовать, так нет же на личности переходите...
Не обидел ли я вас? Так вы уж простите.


Если у вас все же есть пруфлинки в пользу полной поддержку Юникода в PHP, то пожалуйста покажите - я только буду рад это услышать.
По сведениям, дошедшим до меня, полноценная поддержка должна появиться только с выходом версии 6. Новость про PHP на Opennet.ru.
michael
Цитата
зачем тогда вы лезете сюда со своими идиотскими статейками? показывать свою безграмотность?
в этом вы всех уже давно убедили


"порву за князя, за Льва Николаича!"

а вообще Ruby-on-Rails нашевсё
дед_мажор
Цитата (michael)
а вообще Ruby-on-Rails нашевсё

холивар [x]
против джавы не попрёшь!
дед_мажор
Цитата (michael)
По сведениям, дошедшим до меня, полноценная поддержка должна появиться только с выходом версии 6.

оперативно до вас сведения доходят, однако!
об этом было известно еще года три назад.

и еще, про питон.
запомните: язык, который навязывает пользователю свой coding style, является недостойным применения.
Fast Reply:

 Enable Smilies |  Enable Signature
Здесь расположена полная версия этой страницы.
Студенческий клуб ostudent.ru и его создатели не несут ответственности за достоверность самостоятельно размещаемой посетителями сайта информации и не могут подтвердить или опровергнуть её.
Рейтинг@Mail.ru
Invision Power Board © 2001-2025 Invision Power Services, Inc.