<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.apple-style-span
        {mso-style-name:apple-style-span;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
span.i
        {mso-style-name:i;}
span.s
        {mso-style-name:s;}
span.q
        {mso-style-name:q;}
span.cm
        {mso-style-name:cm;}
span.sc
        {mso-style-name:sc;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:2.0cm 42.5pt 2.0cm 3.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=RU link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>>> </span><span style='font-size:11.0pt;color:#1F497D'>А</span><span style='font-size:11.0pt;color:#1F497D'> </span><span style='font-size:11.0pt;color:#1F497D'>если</span><span lang=EN-US style='font-size:11.0pt;color:#1F497D'> encode('cp1251', $text, 1)?</span><span lang=EN-US><br>> "\x{2015}" does not map to cp1251 at /usr/local/lib/perl5/5.10.1/mach/Encode.pm line 158.<br></span>> Мне кажется что проблема в том что некоторые символы не могут быть перекодированы в cp1251 потому ничего <span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>> </span>не происходит <br><br><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Ага </span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 style='border-collapse:collapse'><tr><td style='border:solid black 1.0pt;background:#F8F8F8;padding:.75pt 6.0pt .75pt 6.0pt'><p class=MsoNormal align=center style='text-align:center'>U+2015<o:p></o:p></p></td><td style='border:solid black 1.0pt;border-left:none;background:#F8F8F8;padding:.75pt 6.0pt .75pt 6.0pt'><p class=MsoNormal align=center style='text-align:center'>―<o:p></o:p></p></td><td style='border:solid black 1.0pt;border-left:none;background:#F8F8F8;padding:.75pt 6.0pt .75pt 6.0pt'><p class=MsoNormal align=center style='text-align:center'>e2 80 95<o:p></o:p></p></td><td style='border:solid black 1.0pt;border-left:none;background:#F8F8F8;padding:.75pt 6.0pt .75pt 6.0pt'><p class=MsoNormal style='margin-left:18.0pt'>HORIZONTAL BAR<o:p></o:p></p></td></tr></table><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Не знает она как эту «тире» в ср1251 сконвертить.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Однако, дока нам намекает, что конвертирование при этом вроде не должно было покосячить остальные символы:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>“If CHECK is 0, (en|de)code will put a substitution character in place of a malformed character...”<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Попробуй подставить свой обработчик левых символов:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><a href="http://perldoc.perl.org/5.10.1/Encode.html#coderef-for-CHECK">http://perldoc.perl.org/5.10.1/Encode.html#coderef-for-CHECK</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>что-то типа:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>encode("cp1251", $text, <a href="http://perldoc.perl.org/5.10.1/functions/sub.html"><span style='color:#1F497D;text-decoration:none'>sub</span></a>{ <a href="http://perldoc.perl.org/5.10.1/functions/sprintf.html"><span style='color:#1F497D;text-decoration:none'>sprintf</span></a> "<U+%04X>", <a href="http://perldoc.perl.org/5.10.1/functions/shift.html"><span style='color:#1F497D;text-decoration:none'>shift</span></a> });<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>посмотрим на результат. Если строчка станет читаемой по-русски – меняешь </span><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>sprintf</span><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>по вкусу. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Если нет – истина где-то глубже...<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>----<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Mike Salnikov<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Parallels <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> moscow-pm-bounces+msalnikov=parallels.com@pm.org [mailto:moscow-pm-bounces+msalnikov=parallels.com@pm.org] <b>On Behalf Of </b>Денис Ильиных<br><b>Sent:</b> Tuesday, April 05, 2011 1:54 PM<br><b>To:</b> Moscow.pm group<br><b>Subject:</b> Re: [Moscow.pm] Очень плохая музыка с UTF-8<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'>По советам сделал следующее<br><br>перекодирую так<br>my $cv = Text::Iconv->new("utf-8", "cp1251");<br>$text = $cv->convert($str);<br>ошибок нет вывод просто пустой.<br><br>По вашим советам<br>utf8::is_utf8($str) => 1;<br><br>my $utf8 = pack 'C*', unpack 'U0C*',$str;<br>--- ГђВ§ГђВ°Г‘Ñ‹ ГђВјГ‘ƒÐ¶ÑÐºÐ¸Ðµ CHARMEX VIENNA CH 2031 ГўВЂВ• ГђВЎГђВ°ГђВјГ‘‹Ðµ ГђВњГђВѕГђВґГђВЅГ‘‹Ðµ ГђВ§ГђВ°Г‘Ñ‹<br><br>my $utf8 = pack 'U0C*', unpack 'C*',$str;<br>--- "'0AK <C6A:85 CHARMEX VIENNA CH 2031 \x15 !0<K5 \x1c>4=K5 '0AK"<br><br><span style='font-size:11.0pt;color:#1F497D'>А если encode('cp1251', $text, 1)?</span><br>"\x{2015}" does not map to cp1251 at /usr/local/lib/perl5/5.10.1/mach/Encode.pm line 158.<br>Мне кажется что проблема в том что некоторые символы не могут быть перекодированы в cp1251 потому ничего не происходит <br><br><br>Более подробно.<br>Я собираю заголовки сайтов.<br>LWP -> $tree = HTML::TreeBuilder->new_from_content($response->decoded_content);<br>$title = $tree->look_down(_tag=>"title");<br>my $ntitle = $title->as_text;<br><br>Ошибка на сайте <br>--- GET => <a href="http://www.m-m-i.ru/index.php?productID=1181">http://www.m-m-i.ru/index.php?productID=1181</a><br><br>Это исключение чем правило. Другие заголовки сайтов в UTF-8 обрабатываются корректно.<br><br><br><o:p></o:p></p><div><p class=MsoNormal>5 апреля 2011 г. 10:34 пользователь Mike Salnikov <<a href="mailto:msalnikov@parallels.com">msalnikov@parallels.com</a>> написал:<o:p></o:p></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;color:#1F497D'>А если encode('cp1251', $text, 1)?</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;color:#1F497D'><a href="http://perldoc.perl.org/Encode.html#Handling-Malformed-Data" target="_blank"><span style='color:#1F497D;text-decoration:none'>http://perldoc.perl.org/Encode.html#Handling-Malformed-Data</span></a></span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;color:#1F497D'>Что говорит is_utf8($text)?</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>----</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>Mike Salnikov</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;color:#1F497D'>Parallels </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><b><span lang=EN-US style='font-size:10.0pt'>From:</span></b><span lang=EN-US style='font-size:10.0pt'> moscow-pm-bounces+msalnikov=<a href="http://parallels.com" target="_blank">parallels.com</a>@<a href="http://pm.org" target="_blank">pm.org</a> [mailto:<a href="mailto:moscow-pm-bounces%2Bmsalnikov" target="_blank">moscow-pm-bounces+msalnikov</a>=<a href="http://parallels.com" target="_blank">parallels.com</a>@<a href="http://pm.org" target="_blank">pm.org</a>] <b>On Behalf Of </b>Денис Ильиных<br><b>Sent:</b> Tuesday, April 05, 2011 1:02 PM<br><b>To:</b> <a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a><br><b>Subject:</b> [Moscow.pm] Очень плохая музыка с UTF-8</span><o:p></o:p></p></div></div><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;margin-bottom:12.0pt'>Привет мои дорогие )) Помогите разобраться сломал уже весь моск.<br><br>Есть строка в UTF-8 о чем нам говорит Encode::Detect::Detector;<br><br>Пытаюсь ее перевести в cp1251 в итоге <br><br>--- UTF-8 (Encode::Detect::Detector)<br>--- Р§Р°СЃС‹ РјСѓР¶СЃРєРёРµ CHARMEX VIENNA CH 2031 вЂ• РЎР°РјС‹Рµ РњРѕРґРЅС‹Рµ Р§Р°СЃС‹ (строка)<br>--- ~  (тут должен был быть текст Text::Iconv )<br>--- 'Г—Г Г±Г» Г¬ГіГ¦Г±ГЄГЁГҐ CHARMEX VIENNA CH 2031 ? Г‘àìûå ГЊГ®Г¤Г­Г»ГҐ Г—Г Г±Г»' (тут текст encode('cp1251',$text))<br><br>Причем другие строки которые детектируются как UTF-8 обрабатываются корректно.<br>Есть подозрение что в строке есть спецсимволы на которых Iconv не срабатывает или строка не UTF-8, ошибается детектор. <br><br>perl 5.10.1<o:p></o:p></p></div></div></div></div></div><p class=MsoNormal style='margin-bottom:12.0pt'><br>--<br>Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p></div></div></body></html>