2012-10-11 5 views
2

에서 SYSWRITE에서 Starman 유니 와이드 문자는 ... 나는 시도 :펄, 내가 comЯade</strong>이 단어 <strong>을 가지고 있지만 내가 때문에 러시아어 Я의 HTML에 인쇄 할 수 없습니다

$HTML::Entities::char2entity{'Я'} = '&#1071;'; 
$HTML::Entities::char2entity{'1071'} = '&#1071;'; 
$HTML::Entities::char2entity{'ï'} = '&#1071;'; 
$str = HTML::Entities::encode_entities($str, q{Яï1071}); 

및 그 이후

$str =~ s/1071/&#1071;/g; 
$str =~ s/Я/&#1071;/g; 
$str =~ s/ï/&#1071;/g;  

을하지만 두 경우 모두이 오류 얻을 : 나는 시도에 SYSWRITE에

와이드 문자를/usr/지방/share/perl/5.10.1/Starman/Server.pm 줄 470.

왜?

일부 코드 :

title.mi

<%init> 
binmode STDOUT, ':encoding(UTF-8)'; 
($str =~ s/&/%26/g;); #this is working 
$str =~ s/1071/&#1071;/g; 
$str =~ s/Я/&#1071;/g; 
$str =~ s/ï/&#1071;/g; 
</%init> 
<div class="bd-headline left"> 
<h1 style="margin-top:0; padding-top:0;"> <% $str %> </h1> 
</div> 

base.mc

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 

답변

1

일부 코드 :

title.mi

<%init> 
     use Encode; 
     my $hl = encode_utf8($str); 
     my $find = "&#1071;"; 
     my $replace = "Я"; 
     $hl =~ s/$find/$replace/g; 
     my $hs = HTML::Strip->new(); 
     my $no_html_hl = $hs->parse($hl); 
</%init> 
<div class="bd-headline left"> 
      <h1 style="margin-top:0; padding-top:0;"> <% $no_html_hl %> </h1> 
</div> 

base.mc

<head> </head> 

this link은 도움이되었다.

2

문제 1 :

소스 코드는 UTF을 사용하여 인코딩 된 경우 -8, 당신은 ' use utf8;을 사용하여 Perl에게 많은 것을 말하십시오.

소스 코드가 UTF-8을 사용하여 인코딩되지 않은 경우 소스 코드에 "Я"가 포함될 수 없습니다.


문제 2 :

파일 핸들 만 바이트를 전송할 수 있지만 바이트로 유니 코드 문자를 인코딩하지 않습니다. 이 작업은 UTF-8과 같은 문자 인코딩을 사용하여 수행됩니다. 귀하의 문서에서 사용하는 인코딩에는 어떤 인코딩이 사용됩니까? 다음과 같이 출력을 인코딩하십시오.

binmode STDOUT, ':encoding(UTF-8)'; 
+0

추가하려고 시도했습니다. <%init> binmode STDOUT, ': encoding (UTF-8)'; 여전히 동일한 오류가 있습니다. 내가 뭘 놓치고 있니? – mamesaye

+0

그것은 우리가 누락 된 부분입니다 : 깨진 코드의 샘플. – ikegami

+0

일부 코드가 추가되었습니다. u'r 도움을 주셔서 감사합니다 – mamesaye

1

html 엔티티로 문자를 이스케이프 처리하는 것은 거의 불가능합니다.

기본 서버 (촉매?)가 유니 코드를 인식하지 못할 수 있습니다. CPAN을 검색하는 것은 Catalyst :: Plugin :: Unicode :: Encoding을 도와줍니다.

+0

나는 메이슨 2를 사용하고 있습니다.이 작업을하고 있습니다 ($ str = ~///% 26/g;). – mamesaye