Вы здесьЗнатоки Perl-а, помогите плз: нужен автономный код для конвертации utf-8 -> windows-1251
Опубликовано пт, 08/08/2008 - 11:27 пользователем pkn
Знатоки Perl-а, помогите плз: нужен автономный код для конвертации строки utf-8 -> windows-1251 В идеале - на Perl-е, но сгодится и C или ещё что-нибудь, что можно переписать на Perl-е. Главное, чтобы код был автономный, а не ссылался на библиотеки или модули. Потому что перловый модуль Unicode::Map8 я никак не могу заставить работать на своей системе... :((
|
Вход на сайтПоиск по блогам и форумамUser menuПоследние комментарии
Aliki RE:Подайте бедному копеечку на книжку с литреса... 16 часов
weis RE:Прошу переформатировать, распознать, etc... 2 недели larin RE:Заплатила, а абонемента нет и скачать ничего не могу! 4 недели sibkron RE:Серия "Библиотека французской литературы" (Макбел) 1 месяц akorish RE:Регистрация 1 месяц Tramell RE:Серия "Очень прикольная книга", издательство Азбука-классика 1 месяц Larisa_F RE:Серия "Я познаю мир" издательства "АСТ, Астрель, Олимп",... 1 месяц konst1 RE:Ух, как я не люблю спамеров! 1 месяц tvv RE:DNS 2 месяца sem14 RE:«Не забыть бы тогда, не простить бы и не потерять!»-2 ... 2 месяца larin RE:Заблокирован 2 месяца konst1 RE:Серия «Интеллектуальный детектив» изд-ва АСТ 3 месяца Larisa_F RE:Серия книг «Судьбы книг» издательства «Книга» 3 месяца fixel RE:Пропал абонемент 3 месяца sem14 RE:Книжная серия "Жизнь в искусстве" издательство "Искусство"... 4 месяца sibkron RE:"100 славянских романов", серия изд.-ва "Центр книги... 4 месяца Larisa_F RE:Серия "Новые сказочные повести" издательство "Самовар" ... 5 месяцев sem14 RE:Серия "Символы времени" издательства "Аграф" 5 месяцев Впечатления о книгах
udrees про Михайлов: Пепел доверия-3 (Боевая фантастика, Ужасы, Постапокалипсис, Самиздат, сетевая литература)
28 06 Отличная третья книга из серии про зомбиапокалипсис, хотя конечно там не совсем зомби. Но такого описания конца света в стиле «зомби» и таких противников мне еще не встречалось. Слишком сильных, быстрых, пока не умных и многочисленных. ……… Оценка: отлично!
udrees про Атаманов: Стратег из ниоткуда. Книга третья (Героическая фантастика, Фэнтези, Самиздат, сетевая литература)
28 06 Все отлично. Написано просто, живо, увлекательно. Персонажи тоже яркие и уникальные, как люди, так и нелюди. Предоставленные герою умения оказываются очень полезными в схватке с главными противниками, фактически, помогают ……… Оценка: отлично!
udrees про Каменистый: Рунный практик (Боевая фантастика, Фэнтези, Попаданцы, ЛитРПГ)
28 06 Прекрасное продолжение. Конечно это приключение, где у главного героя все получается, все срабатывает в нужный момент, и как у Бэтмена, для подходящего случая всегда припасен нужный гаджет в кармане, очень кстати оказавшийся ……… Оценка: отлично!
udrees про Мантикор: Тьма в отражении (Боевая фантастика, Технофэнтези, ЛитРПГ, Самиздат, сетевая литература)
28 06 Автор продолжает свое повествование, правда вся книга будет скорее не про путь вниз, а наверх и вбок. Все написано в том же стиле, увлекательно с описанием новых мест и монстров. Глав с перечислением характеристик всех героев ……… Оценка: отлично!
udrees про Мантикор: Истинный враг (Боевая фантастика, Технофэнтези, ЛитРПГ, Самиздат, сетевая литература)
28 06 Продолжение увлекательное, стиль повествования все такой же, но на сей раз действий больше, чем разговоров. Отряд героя продолжает спуск по Стене, и сейчас каждый уровень является обиталищем самых опасных монстров. Но как ……… Оценка: отлично!
trampak про Мясников: Великая Отечественная. 10 000 фактов о войне (История)
27 06 Россия никогда не начинает войн, она их завершает."- эта лживая фраза ставит под сомнение , что автор историк. А кто соврал однажды... Оценка: нечитаемо
Paul von Sokolovski про Логинов: Свет в окошке (Социальная фантастика)
27 06 Очень хорошая, тяжёлая и светлая книжка. То, что все знают - мы живы, пока о нас помнят... у Логинова получает некоторое материальное (?) воплощение. Как быстро мы развеемся? И кто будет помнить нас? Читать, или хотя бы пробовать - всем, всем, всем.
Олег Макаров. про Борчанинов: Лейтенант космического флота [СИ] (Боевая фантастика, Космическая фантастика, Самиздат, сетевая литература)
26 06 Написано хорошо, но не захватывает. Шаблонное космооперное начало. Бросил Оценка: плохо
Олег Макаров. про Иванов: Псоглавцы (Социальная фантастика, Ужасы, Триллер)
26 06 Прочитал. такое впечатление, как в детстве, когда тебе обещали что-то а потом формально выполнили, но радости никакой это не доставило. Не знаю, как по-другому объяснить Оценка: плохо
Олег Макаров. про Смолин: Морпех 1: Сухой Лиман (Альтернативная история, Боевик, Самиздат, сетевая литература)
26 06 Не могу такое читать; опять «герой сво» попадает в 1941 и там становится прям вообще героем Оценка: нечитаемо
Олег Макаров. про Сухов: Обнуленный [СИ] (Боевая фантастика, Космическая фантастика, Попаданцы, Самиздат, сетевая литература)
26 06 Идея возможно интересная, но пишет предельно занудно. Оценка: нечитаемо
Олег Макаров. про Ростов: Выжившие (Боевая фантастика, Постапокалипсис, Самиздат, сетевая литература)
26 06 Картонные герои, бумажные диалоги. Оценка: плохо |
Комментарии
Отв: Знатоки 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
Питоновый код я тут где-то уже приводил