Вы здесьЗнатоки Perl-а, помогите плз: нужен автономный код для конвертации utf-8 -> windows-1251
Опубликовано пт, 08/08/2008 - 11:27 пользователем pkn
Знатоки Perl-а, помогите плз: нужен автономный код для конвертации строки utf-8 -> windows-1251 В идеале - на Perl-е, но сгодится и C или ещё что-нибудь, что можно переписать на Perl-е. Главное, чтобы код был автономный, а не ссылался на библиотеки или модули. Потому что перловый модуль Unicode::Map8 я никак не могу заставить работать на своей системе... :((
|
Вход на сайтПоиск по блогам и форумамUser menuПоследние комментарии
macs1112 RE:Подайте бедному копеечку на книжку с литреса... 42 мин.
sem14 RE:Что читать о блокаде Ленинграда. Подборка книг 1 день sem14 RE:Книжная серия "Жизнь в искусстве" издательство "Искусство"... 6 дней Larisa_F RE:Дэвид Герберт Лоуренс собрание в 7 томах том 3 1 неделя sem14 RE:Собираем серию: "Мастер серия", издательство "Лимбус". 1 неделя Dead_Space RE:Прошу переформатировать, распознать, etc... 1 неделя sibkron RE:«Словенский глагол» 2 недели Tramell RE:Литературная премия имени И.А. Ефремова 2 недели sem14 RE:Серия "Что есть что" издательства "Слово"(чего не хватает) 3 недели larin RE:Оплатил, но абонемент не отображается 3 недели Larisa_F RE:Беляевская премия 1 месяц epoost RE:Чарльз Брокден Браун - Wieland 1 месяц nehug@cheaphub.net RE:Ответственность. 1 месяц nehug@cheaphub.net RE:Доступ 1 месяц Larisa_F RE:Принцесса-бродяжка 1 месяц Larisa_F RE:Серия "Очень прикольная книга", издательство Азбука-классика 1 месяц Tramell RE:Серия "Символы времени" издательства "Аграф" 1 месяц Tramell RE:Серия книг «Судьбы книг» издательства «Книга» 1 месяц Впечатления о книгах
gruin про Федин: Дворянин с понедельника. Часть 2 (Альтернативная история, Исторические приключения, Самиздат, сетевая литература)
06 09 Читать можно, по диагонали пропукая длиннейшие заумные диалоги Оценка: неплохо
Sello про Даллес: Тайная капитуляция (Биографии и Мемуары, Документальная литература)
05 09 История подписания акта капитуляции немцами в Италии, завершившего войну здесь на неделю раньше общей капитуляции. В центре рассказа - знаменитый Карл Вольф, который у Даллеса выглядит вполне симпатично - и, в подтверждение ……… Оценка: хорошо
mysevra про Алатова: Неисправная Анна Том 1 [publisher: SelfPub] (Стимпанк, Самиздат, сетевая литература)
05 09 Ого, решила полистать со скуки, а затянуло, ишь ты. Превосходно. Да, возможно, у героини всё слишком складно налаживается (ну, хоть у кого-то) и всем есть до неё дело, и все ей благоволят - так у меня сейчас самое для подходящее ……… Оценка: отлично!
Олег Макаров. про Яманов: Бесноватый цесаревич. Книга 1 [litres] (Альтернативная история, Попаданцы)
05 09 Англичане вместе с евреями замышляют против России... Вообще антисемитизм такого уровня, какого я, кажется у авторов вообще не встречал. В третьем рейхе Яманов, наверное сошел бы за своего на раз. Вообще, печально, конечно. Пишет-то неплохо.
Stager про Игнатова: Бастард фон Нарбэ (Космическая фантастика)
03 09 Всё же, мировоззрение верующих - оно... странное. Интересно, почему это не считается психическим отклонением? Оценка: неплохо
Barbud про Гончарова: Графиня Суровая (Альтернативная история, Попаданцы)
02 09 Дерьмище редкостное. Первые мысли после попадания - как бы разбогатеть? Чтобы разбогатеть, надо кого-то ограбить. Грабить - так уж и убивать до кучи. Не свои - не жалко. Все это приправлено смердящим шовинизмом, расхожими ……… Оценка: нечитаемо
lwowianin про Гончарова: Истинный облик [litres] (Героическая фантастика, Попаданцы, Юмористическое фэнтези)
31 08 Страшное дело - пропаганда. Хороший автор, талантливые книги, прекрасный язык - но сразу видно, что живёт она в России. Если иностранец - строит козни против Родины, если, не дай бог, гей или лесбиянка - всё, или дураки, или ………
Dead_Space про Гуха: Незалеченные раны. Как травмированные люди становятся теми, кто причиняет боль (Психология, Самосовершенствование)
30 08 ."Отношенческие травмы специфичны для людей. Ни одно другое живое существо не причиняет вред своим сородичам намеренно, разве что при охоте или в период спаривания." При таком уровне экспертизы, проявленном вначале, дальше можно не читать. Оценка: нечитаемо
RamirezElDemoni про Ра   : Задолбанец (Героическая фантастика, Фэнтези, Самиздат, сетевая литература)
30 08 Эксперимент не удался. Вернуть главгера домой в процессе - так себе концовка. Оценка: плохо
Barbud про Тамбовский: Кто остался на трубе [СИ] (Альтернативная история, Социальная фантастика, Попаданцы, Самиздат, сетевая литература)
30 08 Глупость какая-то. Советские школьники в США оставлены почти без присмотра, они там воюют с мафией, охаивают комсомол в разговорах с американцами, живут отдельно в одном доме мальчик с девочкой безо всякого контроля. Не верю. Оценка: нечитаемо
decim про Лукьяненко: Новая фантастика 2026. Антология №10 [сборник litres] (Социальная фантастика, Научная фантастика)
30 08 Легально и бесплатно в количествах на любом самиздатовском сайте. Изводить лес ради тщеславия дебютантов("меня издали на бумаге!") - ну такое. Оценка: плохо
xZiminxx про Мазин: Князь плесковский [АТ] (Альтернативная история, Боевая фантастика, Исторические приключения, Самиздат, сетевая литература)
27 08 На Мазина непохоже вообще . Непонятно кто написал. Оценка: плохо |
Комментарии
Отв: Знатоки Perl-а, помогите
Text::Iconv?
Отв: Знатоки Perl-а, помогите
Он, ЕЯПП, просто интерфейс к библиотеке iconv, а я очень сомневаюсь что она у меня есть. Да я даже сам этот Text::Iconv инсталлировать вряд ли смогу. Если б мог - добился бы работы от Unicode::Map8 :((
На всяк слу, вот конфигурация моего перла:
E:\>perl -V
Summary of my perl5 (revision 5 version 8 subversion 7) configuration:
Platform:
osname=MSWin32, osvers=5.0, archname=MSWin32-x86-multi-thread
uname=''
config_args='undef'
hint=recommended, useposix=true, d_sigaction=undef
usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cl', ccflags ='-nologo -Gf -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DBUILT_BY_ACTIVESTATE -DNO_HASH_SEED -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX',
optimize='-MD -Zi -DNDEBUG -O1',
cppflags='-DWIN32'
ccversion='12.00.8804', gccversion='', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -libpath:"C:\Perl\lib\CORE" -machine:x86'
libpth=\lib
libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib
perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib
libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib
gnulibc_version='undef'
Dynamic Linking:
dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf -libpath:"C:\Perl\lib\CORE" -machine:x86'
Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY USE_ITHREADS USE_LARGE_FILES
USE_SITECUSTOMIZE PERL_IMPLICIT_CONTEXT
PERL_IMPLICIT_SYS
Locally applied patches:
ActivePerl Build 813 [148120]
Iin_load_module moved for compatibility with build 806
PerlEx hacks for CGI::Carp
Less verbose ExtUtils::Install and Pod::Find
instmodsh upgraded from ExtUtils-MakeMaker-6.25
24699 ICMP_UNREACHABLE handling in Net::Ping
21540 Fix backward-compatibility issues in if.pm
Built under MSWin32
Compiled at Jun 6 2005 13:36:37
@INC:
C:/Perl/lib
C:/Perl/site/lib
.
E:\>
Отв: Знатоки Perl-а, помогите плз: нужен автономный код для кон
Если речь идет о *nix и надо сделать быстро, то может быть попробовать выполнить из perl recode(1)? А потом, на досуге, повоевать с Unicode::Map8...
Отв: Знатоки Perl-а, помогите плз: нужен автономный код для кон
Машина - винбокс (Win XP Pro), причем не девелоперская, на ней даже make нету и я не все смогу инсталлировать (комп не мой, компании).
И задача - конвертить строку, не файл... хотя если бы был на машине recode, можно было бы сплюнуть строку в файл и напустить на него recode... но его нет.
Собственно, задача - вынуть (перловым скриптом) из ~140,000 fb2-файлов (кодировки windows-1251, windows-1252, utf-8, koi8-r, iso-8559-1) строку с названием книги и сравнить. Я могу управиться с windows-1251, windows-1252, koi8-r, iso-8559-1, но вот на utf-8 произошел затык, чтоб его...
Отв: Знатоки Perl-а, помогите плз: нужен автономный код для кон
Мейби так:
#!/usr/bin/perluse open IN => ':utf8', OUT => ':encoding(cp1251)';
use open ':std';
print while(<>);
?
Отв: Знатоки Perl-а, помогите плз: нужен автономный код для кон
А ноги у этой хрени растут из модуля Encode.pm.
Отв: Знатоки Perl-а, помогите плз: нужен автономный код для кон
Так... кажется, в моем перле есть модуль Encode::Encoder -- Object Oriented Encoder... изучаю...
Отв: Знатоки Perl-а, помогите плз: нужен автономный код для кон
да-да-да
можно конвертнуть двумя способами:
use Encode qw(from_to encode decode);$str = "привет";
from_to($str, "utf8", "cp1251");
print $str;
$str = "привет";
print encode("cp1251", decode("utf8", $str));
Отв: Знатоки Perl-а, помогите плз: нужен автономный код для кон
Кажись, заработало. Именно с использованием модуля Encode - спасибо, ground0!
Не обошлось без метода тыка и странностей, но вроде работает - кроме некоторых экзотических fb2-файлов, в которых указана кодировка iso-8859-1 или windows-1252, но буквы на самом деле содержатся в какой-то странной форме, типа HTML-символов, вот так:
Курс на
Если кому интересно - работает вот примерно такой код:
# NO!!! use encoding 'windows-1251';
# NO!!! use encoding 'utf-8';
use Encode;
...
my $tit = &sub_fb2_get_booktitle($des);
my $enc = &sub_fb2_get_encoding($des);
# nope... binmode(STDOUT,":utf8");
if( uc($enc) eq "WINDOWS-1252")
{
$tit = decode("iso-8859-2",$tit);
}elsif( uc($enc) eq "WINDOWS-1251" ){
$tit = decode("windows-1251",$tit);
}elsif( uc($enc) eq "ISO-8859-1" ){
$tit = decode("iso-8859-1",$tit);
}elsif( uc($enc) eq "KOI8-R" ){
$tit = decode("koi8-r",$tit);
}elsif( uc($enc) eq "UTF-8" ){
$tit = decode("utf-8",$tit); # yes, it's necessary!
}else{
printf("[%6d of %6d] Bad enc="%s" $fullfname_G\n",$curnum_G,$listsize_G,$enc);
}; # iffelse
###
# Works!!!
$tit = encode("windows-1251",$tit);
# Now tit is in win-1251
Отв: Знатоки Perl-а, помогите плз:
А можно на php? В прошлом веке я с такими проблемами часто сталкивался
тупое сопоставление
острое сопоставление
Отв: Знатоки Perl-а, помогите плз:
Ааагромадное спасибо! Переделал под Перл Ваше "острое сопоставление" - работает, саб-бака! :)) По крайней мере на тестовых двадцати файликах - работает как лялечка.
У меня, конечно, есть подозрение что где-то может и сбойнуть (я правильно понимаю, что код предполагает все utf-8 буквы двухбайтными?) но это уже поодиночке разбираться будем. Ща я его на все 100+ тысяч напущу, пусть поурчит и посмотрим что скажет...
Отв: Знатоки Perl-а, помогите плз:
Так... "острое сопоставление" все-таки слишком часто сбивается, если я правильно понимаю - на тире, кавычках, скобках и тому подобном.
Зато модуль Encode, кажется, работает.
Отв: нужен автономный код для конвертации utf-8 -> windows-1251
Питоновый код я тут где-то уже приводил