Вы здесьЗнатоки Perl-а, помогите плз: нужен автономный код для конвертации utf-8 -> windows-1251
Опубликовано пт, 08/08/2008 - 11:27 пользователем pkn
Знатоки Perl-а, помогите плз: нужен автономный код для конвертации строки utf-8 -> windows-1251 В идеале - на Perl-е, но сгодится и C или ещё что-нибудь, что можно переписать на Perl-е. Главное, чтобы код был автономный, а не ссылался на библиотеки или модули. Потому что перловый модуль Unicode::Map8 я никак не могу заставить работать на своей системе... :((
|
Вход на сайтПоиск по блогам и форумамUser menuПоследние комментарии
kopak RE:О группе Дятлова. О той самой, того самого... 3 часа
aldan RE:Подайте бедному копеечку на книжку с литреса... 6 часов Isais RE:Катя Водянова - Дом и два жениха в придачу 17 часов Aleks_Sim RE:Прошу переформатировать, распознать, etc... 1 день kopak RE:Таинственная личность админа Флибусты 6 дней Саша из Киева RE:Кто сможет раздобыть и оцифровать нужные мне книги? 6 дней Isais RE:Дмитрий Анатольевич Горчев - ЖЖ Дмитрия Горчева (2009–2010) 1 неделя Саша из Киева RE:Детям о Ленине (Издание 1965 года) 1 неделя Саша из Киева RE:Приключения Мишки-Ушастика (Перевод Марата Брухнова) 2 недели babajga RE:Белая княжна 3 недели Isais RE:Файл достаточно хорош. Нет смысла в его улучшении. Ага,... 3 недели mazay RE:Sleepy Xoma - Bagⲣѱnoⲣojdennaѱ 3 недели zlyaka RE:С Новым годом! 4 недели Isais RE:Детство, опаленное войной (Вторая мировая 1939-1945 и ВОВ) 4 недели SparkySpirit RE:Жорж Санд - переводы 19 века 1 месяц Саша из Киева RE:Наш дом - СССР 1 месяц babajga RE:Чернушка. Повести 1 месяц Саша из Киева RE:Сказки далёких островов 1 месяц Впечатления о книгах
Лысенко Владимир Андреевич про Полтавченко: В прицеле «Азов» (Современная проза, О войне, Роман)
30 01 Нечитаемо, как хорошо убивать всех несогласных с русским миром, все наши правильные, а кто думает по другому должны быть убиты, осталось только Аляску захватить. Оценка: нечитаемо
Barbud про Фонд: Баба Люба. Вернуть СССР 4 (СИ) (Попаданцы, Самиздат, сетевая литература, Фантастика)
29 01 Дерьмище редкостной зловонности. Главное, что автор писать умеет, пишет образно, без "картона", коим грешат очень многие кропатели нетленки. Но боже мой, какую же херню он пишет! Первые две части осилил, остальные пролистнул по диагонали, ибо чушь. Оценка: нечитаемо
decim про Р. Дж. Баркер
29 01 Хорошо, а местами и отлично. Было бы совсем отлично, если бы автор не растянул историю на три тома, но это обычное дело.
mysevra про Баркер: Алые песнопения (Ужасы, Триллер, Детективы: прочее)
29 01 Как часть истории «Восставшего» - мило и познавательно. Но зачем такое изобилие обсценной лексики уличного разлива? Для реализьму, так сказать? Так у меня дл вас плохие новости, мои маленькие друзья, это лет 30 назад такое ………
lukyanelena про Гремучий ручей
29 01 Хотите серию про вампиров? Пожалуйста! Только забудьте про романтичные истории с загадочными красавцами и красавицами. Будет больно, будет страшно, будет неприятно, но я скорее поверю в таких тварей, чем в слащавых вампирчиков.
Лысенко Владимир Андреевич про Земляной: Игровой практикум [СИ] (Боевая фантастика, Фэнтези, ЛитРПГ)
29 01 Книга понравилась, читается легко, жду продолжения. Оценка: отлично!
Nicout про Сушков: "Ленинградское дело": генеральная чистка колыбели революции (Документальная литература)
29 01 Говорите, во время блокады Ленинграда руководство города голодало, как и остальные жители, а все рассказы про пирожные, колбасу и икру для коммуняк - вранье и клевета? Ну так прочтите что из себя представляли питерские деятели, ……… Оценка: отлично!
Синявский про Николай Егорович Дронников
28 01 На 95-м году жизни скончался Николай Дронников - советский и французский художник, график, скульптор, прозаик и издатель авторских книг, "летописец русской эмиграции".
ve51 про Чейз: Плоть орхидеи [The Flesh of the Orchid ru] (Крутой детектив)
27 01 Книга не входит в цикл "Дэйв Фэннер
Skyns71 про Гузман: Тропой священного козерога, или В поисках абсолютного центра (Современная проза, Биографии и Мемуары)
27 01 Господи... Жизнеописание наркомана.
sigor2000 про Бакман: Вторая жизнь Уве [En Man Som Heter Ove ru] (Современная проза)
27 01 Книга просто шикарна. По моему мнению в книге нет повесточки. Персонажи геи, мигранты это по факту то, что осталось от Швеции. Вместе со смерьтю ГГ умерла и та Швеция, которую мы знали, вот о чем пишет автор. Самое смешное, ……… Оценка: отлично!
mysevra про Лэнган: Рыбак [The Fisherman ru] (Ужасы)
27 01 Хороший язык. Но, во-первых, рассказ выжившего - а как же интрига? А во-вторых - и это самое главное - к середине книги до жути я так и не добралась, зато узнала подробно о жене, алкоголизме и рыбалке. Подробно, многословно ……… Оценка: плохо |
Комментарии
Отв: Знатоки 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/perl
use 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
Питоновый код я тут где-то уже приводил