Вы здесьЗнатоки Perl-а, помогите плз: нужен автономный код для конвертации utf-8 -> windows-1251
Опубликовано пт, 08/08/2008 - 11:27 пользователем pkn
Знатоки Perl-а, помогите плз: нужен автономный код для конвертации строки utf-8 -> windows-1251 В идеале - на Perl-е, но сгодится и C или ещё что-нибудь, что можно переписать на Perl-е. Главное, чтобы код был автономный, а не ссылался на библиотеки или модули. Потому что перловый модуль Unicode::Map8 я никак не могу заставить работать на своей системе... :((
|
Вход на сайтПоиск по блогам и форумамUser menuПоследние комментарии
wvd RE:Подайте бедному копеечку на книжку с литреса... 4 часа
Саша из Киева RE:Приключения белочки Рыжки 2 дня Paul von Sokolovski RE:На 78-м году жизни скончался советский и российский... 3 дня Paul von Sokolovski RE:Бушков умер. 3 дня lemma7 RE:Серия «Интеллектуальный детектив» изд-ва АСТ 4 дня Larisa_F RE:Книжная серия "Жизнь в искусстве" издательство "Искусство"... 5 дней mig2009 RE:Багрепорт - 2 1 неделя Isais RE:Издательство "Медуза" 1 неделя babajga RE:Народные сказки - Сказки народов Сибири = Fairy-Tales of... 2 недели Саша из Киева RE:Кто сможет раздобыть и оцифровать нужные мне книги? 2 недели sibkron RE:Серия "Библиотека французской литературы" (Макбел) 3 недели Isais RE:Игорь Северянин - Том 2. Поэзоантракт 3 недели sem14 RE:Современная корейская литература. Книжная серия... 4 недели sem14 RE:Семейственность в литературе 1 месяц Isais RE:Детство, опаленное войной (Вторая мировая 1939-1945 и ВОВ) 1 месяц Саша из Киева RE:Подводное течение 1 месяц konst1 RE:Переименовать ник (имя учетки) 1 месяц Larisa_F RE:Таррин Фишер 2 месяца Впечатления о книгах
Олег Макаров. про Дэн Перцефф
27 10 А почему его называют "американский журналист", если очевидно, что это российский автор под псевдонимом?
mysevra про Васильчикова: Берлинский дневник, 1940–1945 [Berlin Diaries, 1940–1945 ru] (Биографии и Мемуары)
27 10 Имена, нравы, традиции и лёгкость – совсем иной мир. Читая Дневник понимаешь, как убого и натужно смотрятся нынешние «аристократы» местного разлива – и в жизни, и на экране. Оценка: отлично!
mysevra про Мегре: Анастасия (Современная проза, Ненаучная фантастика)
27 10 Возможно, в чём-то автор и прав, но от такой страшно сладенькой и одновременно патетически-выспренной манеры подачи просто коробит. Оценка: плохо
mysevra про Перцефф: Атака на мозг. Оскал психотронной войны (Публицистика)
27 10 А замаху-то было… Обо всём и ни о чём. Оценка: неплохо
Никос Костакис про Зурков: Большая охота (Альтернативная история, Боевая фантастика, Попаданцы)
26 10 «Шо ни зьим, тое попыднадкусваю». Автор уверен, что он правильно воспроизводит украинский язык? Или "и так сойдет"?
Олег Макаров. про Пепел доверия
26 10 Интересно. Очень долго раскачивается сюжет, до движухи доходит после середины, но написано хорошо и читается достаточно легко. Отличная идея причин и развития апокалипсиса. Реально триллер.
udrees про Даути: Когда дым застилает глаза [Провокационные истории о своей любимой работе от сотрудника крематория] [Smoke Gets in Your Eyes: And Other Lessons from the Crematory ru] (Современная проза, Биографии и Мемуары)
26 10 Какая страшная книга, написанная от лица работника похоронного бюро насчет похоронных ритуалов и о своей работе – в основном о сжигании тел в печи крематория. Сама авторша видать все-таки с прибабахом, все же не каждый человек ……… Оценка: хорошо
udrees про Михайлов: Пепел доверия 2 (Боевая фантастика, Постапокалипсис, Самиздат, сетевая литература)
26 10 Вторая книга из новой серии про жизнь во время зомби-апокалипсиса. Первая книга была хорошо написана, где начиналась завязка сюжета. Вторая книга думаю оказалась не хуже. Сюжет также идет неторопливо, показывая всю боль мира ……… Оценка: отлично!
udrees про Мантикор: Покоривший СТЕНУ 19: Оазис (Боевая фантастика, ЛитРПГ, Самиздат, сетевая литература)
26 10 Замечательное продолжение, уже 19-я книга от автора и герой почти закончил прохождение Стены. Все описано достаточно живо и интересно, описаний статов на десяток страниц уже почти нет. В книге есть около десятка иллюстраций. ……… Оценка: отлично!
ne_fanat про Дронт: Семьянин [СИ] (Социальная фантастика, Фэнтези, Попаданцы, Самиздат, сетевая литература)
25 10 Великолепная серия. На уровне Ильина, Метельского, Мазина или Васильева. Короче говоря, автор входит в мой личный ТОП рейтинга. Оценка: отлично!
Barbud про Чайка: Купец из будущего. Часть 2 [СИ] (Альтернативная история, Историческая проза, Самиздат, сетевая литература)
25 10 Что-то в этом есть. И язык неплох, и историчность присутствует. Книга побудила поинтересоваться событиями той эпохи. С удивлением узнал, что ГГ не с потолка взят, реально существовал такой весьма успешный древнеславянский ……… Оценка: отлично! |
Комментарии
Отв: Знатоки 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
Питоновый код я тут где-то уже приводил