Как сохранить результат работы Data::Dumper в файл так, чтобы нормально был виден русский текст, а не в виде юникодных кодов?
Делаю так:
use Encode; use encoding "cp1251", STDOUT=>"cp866"; $d->{russian}='Рашн текст'; #open F,">:utf8","sells"; open F,">:encoding(cp1251)","sells"; print F Data::Dumper->Dump([$d],['d']); close F
в итоге в файле получаю: 'russian' => "\x{420}\x{430}\x{448}\x{43d} 'russian' => \x{442}\x{435}\x{43a}\x{441}\x{442}",
В субботу, 29 января 2011 года, в 14:45, ты писал(а) мне:
SG>> Как сохранить результат работы Data::Dumper в файл так, чтобы SG>> нормально был виден русский текст, а не в виде юникодных кодов?
SG>> Делаю так:
SG>> use Encode; SG>> use encoding "cp1251", STDOUT=>"cp866";
EP> (note для экспериментаторов, если такие есть, ессно) Заменить EP> кодировку на местную. Пока не поправил было вообще весело. В смысле? исходник в виндовой кодировке, вывод в консоль - в досовской. Просто print "Русский тескст" норамльно отрабатывает.
SG>> $d->{russian}='Рашн текст'; SG>> #open F,">:utf8","sells"; SG>> open F,">:encoding(cp1251)","sells"; SG>> print F Data::Dumper->Dump([$d],['d']); SG>> close F
SG>> в итоге в файле получаю: SG>> 'russian' => "\x{420}\x{430}\x{448}\x{43d} SG>> \x{442}\x{435}\x{43a}\x{441}\x{442}",
EP> (Subj должен был быть: "хочу странного") В общем, я обломался делать EP> работающий пример. Печатаем вывод Dump в строку, проходим по строке с EP> s{}{}ge, потом печатаем эту строку (с 'open F, ">:encoding"') должно EP> взлететь.
EP> Однако, заменять надо на *internal encoding*. Это как? ведь в строки-то так и хранятся во внутренней кодировке.
EP> Вот тут я и EP> обломался. Или получается мусор или ничего не меняется. С присваиванием в переменную вывод сабжа у меня тоже ничего не вышло...
SG>> А как получить исходный "Рашн текст" ? EP> print "russian => $d->{russian}"; EP> Мне кажется, ты копаешь не в том направлении. Предлагаешь переписать функционал Data::Dumper? не, неохота... :)
SG>> в итоге в файле получаю: SG>> 'russian' => "\x{420}\x{430}\x{448}\x{43d} SG>> 'russian' => \x{442}\x{435}\x{43a}\x{441}\x{442}",
EP> (Subj должен был быть: "хочу странного") В общем, я обломался делать EP> работающий пример.
ничего странного. при отладке вебприложений очень часто хочется сделать die Dumper и поглядеть что там внутри объектов. соответственно русские символы хочется видеть правильными.
мы тоже извратнулись на эту тему написав свой регулярник после вызова дампера.
EP> Печатаем вывод Dump в строку, проходим по строке с EP> s{}{}ge, потом печатаем эту строку (с 'open F, ">:encoding"') должно EP> взлететь. Однако, заменять надо на *internal encoding*. Вот тут я и EP> обломался. Или получается мусор или ничего не меняется.
но с кодировками мы не парились, везде utf8 и все тут. зачем сейчас лезть в поддержку не utf8? оно все равно помрет
... Природа мудра! у гомиков, либералов и прочих извращенцев обычно нет детей.
with <MSGID_2=3A5020=2F830.100_06d98...@fidonet.org> Dmitry E Oboukhov wrote: *SKIP* EP>> Печатаем вывод Dump в строку, проходим по строке с s{}{}ge, EP>> потом печатаем эту строку (с 'open F, ">:encoding"') должно EP>> взлететь. Однако, заменять надо на *internal encoding*. Вот тут EP>> я и обломался. Или получается мусор или ничего не меняется.
DEO> но с кодировками мы не парились, везде utf8 и все тут. зачем DEO> сейчас лезть в поддержку не utf8? оно все равно помрет
Вообще-то напоминает чтение текста в cp866 с экрана в cp437. Неа? Со временем научимся читать эти кракозябры напрямую.
-- Torvalds' goal for Linux is very simple: World Domination Stallman's goal for GNU is even simpler: Freedom
В пятницу, 04 февраля 2011 года, в 11:52, ты писал(а) Eric Pozharski:
DEO> мы тоже извратнулись на эту тему написав свой регулярник после вызова DEO> дампера. Дай, пожалуйста, работающий пример такой регулярки. У меня не получилось сделать.
EP>>> Печатаем вывод Dump в строку, проходим по строке с s{}{}ge, EP>>> потом печатаем эту строку (с 'open F, ">:encoding"') должно EP>>> взлететь. Однако, заменять надо на *internal encoding*. Вот тут EP>>> я и обломался. Или получается мусор или ничего не меняется.
DEO>> но с кодировками мы не парились, везде utf8 и все тут. зачем DEO>> сейчас лезть в поддержку не utf8? оно все равно помрет
EP> Вообще-то напоминает чтение текста в cp866 с экрана в cp437. Hеа? Со EP> временем научимся читать эти кракозябры напрямую.
суть в том что внутренности самого скрипта надо в любом случае делать в utf8, а вот со внешним миром можно общаться с установкой encoding'ов в значение соответствующее локали. тогда можно думать только об utf8, а о том как подать это пользователю можно уже не париться
... Слабый пол сильнее сильного в силу слабости сильного пола к слабому.
with <MSGID_2=3A5020=2F830.100_64428...@fidonet.org> Dmitry E Oboukhov wrote: *SKIP*
DEO> суть в том что внутренности самого скрипта надо в любом случае DEO> делать в utf8, а вот со внешним миром можно общаться с установкой DEO> encoding'ов в значение соответствующее локали. тогда можно думать DEO> только об utf8, а о том как подать это пользователю можно уже не DEO> париться
Вот это как раз то, чего мне в понималке то и не хватало. Now, I feel much better.
-- Torvalds' goal for Linux is very simple: World Domination Stallman's goal for GNU is even simpler: Freedom