Вы здесьЗнатоки Perl-а, помогите плз: нужен автономный код для конвертации utf-8 -> windows-1251
Опубликовано пт, 08/08/2008 - 11:27 пользователем pkn
Знатоки Perl-а, помогите плз: нужен автономный код для конвертации строки utf-8 -> windows-1251 В идеале - на Perl-е, но сгодится и C или ещё что-нибудь, что можно переписать на Perl-е. Главное, чтобы код был автономный, а не ссылался на библиотеки или модули. Потому что перловый модуль Unicode::Map8 я никак не могу заставить работать на своей системе... :((
|
Вход на сайтПоиск по блогам и форумамUser menuПоследние комментарии
lemma7 RE:Серия «Интеллектуальный детектив» изд-ва АСТ 18 мин.
konst1 RE:Переименовать ник (имя учетки) 2 дня sem14 RE:Книжная серия "Жизнь в искусстве" издательство "Искусство"... 2 дня Океана RE:Подайте бедному копеечку на книжку с литреса... 23 часа Larisa_F RE:Современная корейская литература. Книжная серия... 2 недели Larisa_F RE:Таррин Фишер 2 недели Aleks_Sim RE:Беженцы с Флибусты 2 недели Саша из Киева RE:Как приобретать друзей и оказывать влияние на людей 3 недели Isais RE:Семейственность в литературе 3 недели miri.ness_ RE:Доступ 27 3 недели bmusanov Оплатил, но абонемент не отображается 4 недели holla RE:Багрепорт - 2 1 месяц konst1 RE:Файнридер для Win11 1 месяц larin RE:Оплатил, но абонемент не отображается 1 месяц sem14 RE:Книжная серия «Сlio» издательства "Евразия" 1 месяц Isais RE:Национальный конкурс на лучшее литературное произведение... 1 месяц Isais RE:Детство, опаленное войной (Вторая мировая 1939-1945 и ВОВ) 1 месяц sem14 RE:«Морской роман» — книжная серия Калининградского книжного... 1 месяц Впечатления о книгах
lukyanelena про Корсакова: Полное погружение [Миллионер из подворотни] (Современные любовные романы)
03 09 Кто написал это убожество под именем Корсаковой?! Примитивный сценарий для тупой мелодрамы. Дочитать не получилось. Оценка: нечитаемо
svetik489 про Капба: На золотом крыльце - 2 (Киберпанк, Городское фэнтези, Самиздат, сетевая литература)
01 09 а чего тут такого восхитительного? так, на троечку,с натягом... Оценка: неплохо
udrees про Каку: Физика невозможного [Physics of the Impossible: A Scientific Exploration into the World of Phasers, Force Fields, Teleportation, and Time Travel ru] (Физика, Научпоп)
31 08 Увлекательно прочитать про возможности и открытия, которые могут быть доступны в ближайшие сотню лет или больше. Книга немного уже устарела, информация базируется видимо на сведениях 2006-2007 годов. Сейчас в 2025 году часть ……… Оценка: хорошо
udrees про Роузвуд: Джеффри Дамер. Ужасающая история одного из самых известных маньяков в мире [litres] [Jeffrey Dahmer: A Terrifying True Story of Rape, Murder & Cannibalism ru] (Биографии и Мемуары, Публицистика, Документальная литература)
31 08 Кому интересно почитать про историю ужасных преступлений Джеффри Дамера – почитайте книгу. Она достаточно подробно на 50 страницах описывает его похождения и убийства мужчин, без особых кровавых подробностей, хотя описания ……… Оценка: неплохо
udrees про Мантикор: Зеркало Мисы (Боевая фантастика, ЛитРПГ, Самиздат, сетевая литература)
31 08 Как увлекательно становится читать долгую историю приключений друида, который по силе невероятно прокачался по ветке РПГ, что практически стал богом, когда он натыкается на препятствия и противников, которые сводят на нет ……… Оценка: отлично!
Amfortas про Бачигалупи: Навола (Социальная фантастика, Городское фэнтези, Историческое фэнтези)
30 08 Скучно. Невыносимо скучно. Не одолел, бросил на половине. Слащавый "роман воспитания" с кучей банальных деталей. Повествование, ведущее в никуда. Не спасает даже стилизация под итальянское Возрождение. Лучше почитать словарь. Веселее и более интригующе. Оценка: плохо
Олег Макаров. про Юдковски: Гарри Поттер и методы рационального мышления [Harry Potter and the Methods of Rationality ru] (Фэнтези, Фанфик)
30 08 Один из лучших в мире специалистов по критическому мышлению написал фанфик по Гарри Поттеру для того, чтобы большее количество людей заинтересовались критическим мышлением. Представляете, что получилось? Оценка "отлично". ……… Оценка: отлично!
Олег Макаров. про Капба: На золотом крыльце - 2 (Киберпанк, Городское фэнтези, Самиздат, сетевая литература)
30 08 Капба это Капба. К его книгам не читайте аннотаций, читайте сами книги. 5 баллов это недостаточное количество баллов. Оценка: отлично!
Sello про Мережковский: Петр и Алексей (Историческая проза)
30 08 Поздновато, конечно, я разобрался, почему "не прет" мне Мережковский - лишь с третьей попытки, на третьем романе серии. Потому что там, где религия перетягивает на себя одеяло в ущерб историческому повествованию, истина, всегда, ……… Оценка: неплохо
mysevra про Эйрес: Оззи. Автобиография без цензуры [I Am Ozzy ru] (Биографии и Мемуары)
29 08 Несмотря на множество грустных моментов, книга просто пропитана оптимизмом и юмором. Возможно, местами позитив слишком уж натужный, но по-другому никак не выжить в некоторых обстоятельствах, тут тянешь себя за волосы как Мюнхгаузен. Оценка: отлично!
mysevra про Тюльбашева: Лес (Ужасы, Триллер, Мистика)
29 08 Слишком "мыльный" привкус. Где, собственно, события? Заблудились, пропали, шли, шли, поели макарон, шли, шли, совсем пропали. Часть вторая… Оценка: плохо
mysevra про Васильев: Легкий заказ [СИ] (Городское фэнтези, Самиздат, сетевая литература)
29 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
Питоновый код я тут где-то уже приводил