Вы здесьЗнатоки Perl-а, помогите плз: нужен автономный код для конвертации utf-8 -> windows-1251
Опубликовано пт, 08/08/2008 - 11:27 пользователем pkn
Знатоки Perl-а, помогите плз: нужен автономный код для конвертации строки utf-8 -> windows-1251 В идеале - на Perl-е, но сгодится и C или ещё что-нибудь, что можно переписать на Perl-е. Главное, чтобы код был автономный, а не ссылался на библиотеки или модули. Потому что перловый модуль Unicode::Map8 я никак не могу заставить работать на своей системе... :((
|
Вход на сайтПоиск по блогам и форумамUser menuПоследние комментарии
sem14 RE:Книжная серия "Жизнь в искусстве" издательство "Искусство"... 4 часа
Isais RE:Багрепорт - 2 1 день konst1 RE:Файнридер для Win11 2 дня Океана RE:Подайте бедному копеечку на книжку с литреса... 1 день larin RE:Оплатил, но абонемент не отображается 4 дня sem14 RE:Книжная серия «Сlio» издательства "Евразия" 1 неделя Isais RE:Национальный конкурс на лучшее литературное произведение... 1 неделя Isais RE:Детство, опаленное войной (Вторая мировая 1939-1945 и ВОВ) 1 неделя sem14 RE:Современная корейская литература. Книжная серия... 1 неделя sem14 RE:«Морской роман» — книжная серия Калининградского книжного... 1 неделя larin RE:Оплатил,но абонемент не отображается 1 неделя larin RE:Оплатил, но абонемент не отображается 1 неделя sd RE:Fishing 1 неделя Алексей111111111111 RE:Оплатила,но абонемент не отображается 2 недели sd RE:Доступ 27 2 недели kopak RE:Беженцы с Флибусты 2 недели Isais RE:Вадим Иванович Туманов - Всё потерять - и вновь начать с... 2 недели Isais RE:Семейственность в литературе 3 недели Впечатления о книгах
DiSp про Лорд Системы
03 08 Хорошая серия. Любителям почитать, как герои-попаданцы с нуля налаживают быт, а потом развивают себя и общество до высот, о которых сперва и мечтать не могли - самое то. Слог хороший, юморной. И нет излишней жести и жестокости. ГГ удаётся остаться человеком.
udrees про Лей: Инвазия 3 (Боевая фантастика, Ужасы, Фантастика: прочее, Самиздат, сетевая литература)
03 08 Наверное это завершение трилогии про новых ксеноморфов. Вторая книга растянулась на две части. Вот в этой книге автор описывает продолжение борьбы с монстрами. Получается плохо, несмотря на все технические навороты, наличие ……… Оценка: неплохо
udrees про Вальтер: Точка невозврата (Боевая фантастика, Космическая фантастика, Приключения: прочее, Самиздат, сетевая литература)
03 08 Я так понял это завершение трилогии про Элпис. Мне казалось, что третья книга будет еще слабее чем вторая, но надо сказать, что получилось наоборот. Описания достаточно красочные, до самого конца сюжет кажется предсказуемым, ……… Оценка: хорошо
udrees про Михайлов: Ярость бога [повесть] (ЛитРПГ)
03 08 Прикольный рассказ из мира Вальдиры. Короткий, смешной, увлекательный. Оценка: хорошо
udrees про Михайлов: Кроу [СИ] (ЛитРПГ, Самиздат, сетевая литература)
03 08 Хорошо написанная книга в жанре литРПГ, не сильно перегруженная статами персонажа и эффектами от артефактов. Да и вообще в книге совсем мало боевых эпизодов и приключений, как ни странно. Можно даже сказать, что это симулятор ……… Оценка: хорошо
udrees про Варламова: С ума сойти! Путеводитель по психическим расстройствам для жителя большого города (Научная литература: прочее, Психотерапия и консультирование)
03 08 Хорошая книга, написанная популярным языком про основные психические заболевания, можно многое почерпнуть про самые различные состояния, какие у них симптомы, кому грозит «шиза» и как ее лечить. Из книги я узнал, что шизофрения ……… Оценка: хорошо
Barbud про Ланцов: Железный лев (Альтернативная история, Социальная фантастика, Попаданцы, Самиздат, сетевая литература)
02 08 Тетушки, в первой половине XIX века употребляющие названия "ацетон" и "серная кислота" - явный анахронизм, тогда эти вещества назывались по-другому. А так вообще - типичная махровая ланцовщина. ГГ круче каленых яиц, всяких ……… Оценка: плохо
mysevra про Блэквуд: Вендиго [сборник litres] (Ужасы, Фэнтези, Городское фэнтези)
02 08 Чувствуется несовременность текста: деликатность в описании, сдержанность и отсутствие показной кровожадности. Оценка: хорошо
mysevra про Кинг: Долгая прогулка [The Long Walk ru] (Социальная фантастика)
02 08 Ого, меня проняло. Это же надо уметь так излагать (да и переводить тоже). Хорошая история, заставляет задуматься, не зря включена в список ALA. Оценка: отлично!
mysevra про Пиккирилли: Осколки [The Shards ru] (Ужасы, Триллер)
02 08 С ужасами здесь не густо. Скорее вялотекущий «крутой детектив», в котором главный герой с тёмным прошлым спит с красавицами и мутит – по его же словам – воду. Не хватает многозначительной сцены на пирсе в дождливую ночь под звуки саксофона. Оценка: хорошо
Aleks_Sim про Стопичев: СВО. Босиком по стеклу (Современная проза, Публицистика, О войне)
01 08 Русским, где бы они не жили никто не мешает, а вот бандеровцам мешают - поляки, венгры, сербы и конечно русские... Оценка: отлично!
Perca про Шаргородский: Защитник феи [СИ] (Городское фэнтези, Самиздат, сетевая литература)
01 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/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
Питоновый код я тут где-то уже приводил