我有这个词comЯade但我不能用HTML打印它因为俄语Я...我 尝试过:
$HTML::Entities::char2entity{'Я'} = 'Я';
$HTML::Entities::char2entity{'1071'} = 'Я';
$HTML::Entities::char2entity{'ï'} = 'Я';
$str = HTML::Entities::encode_entities( $str, q{Яï1071} );
之后我尝试了:
$str =~ s/1071/Я/g;
$str =~ s/Я/Я/g;
$str =~ s/ï/Я/g;
但在这两种情况下我都会收到此错误:
/usr/local/share/perl/5.10.1/Starman/Server.pm第470行的syswrite中的宽字符。
为什么呢?
一些代码:
title.mi
<%init>
binmode STDOUT, ':encoding(UTF-8)';
($str =~ s/&/%26/g;); #this is working
$str =~ s/1071/Я/g;
$str =~ s/Я/Я/g;
$str =~ s/ï/Я/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>
答案 0 :(得分:2)
问题1:
如果您的源代码是使用UTF-8编码的,那么使用use utf8;
并没有告诉Perl。
如果您的源代码未使用UTF-8编码,则其中不可能包含“Я”。
问题2:
文件句柄只能传输字节,但不会将Unicode字符编码为字节。这是通过使用诸如UTF-8的字符编码来完成的。您的文档指定使用哪种编码?使用它对输出进行编码,如下所示:
binmode STDOUT, ':encoding(UTF-8)';
答案 1 :(得分:1)
通过用html实体替换它们来逃避字符几乎不是正确的事情。
底层服务器(催化剂?)可能不支持unicode。在CPAN上搜索Catalyst :: Plugin :: Unicode ::编码可能有所帮助。
答案 2 :(得分:1)
一些代码:
title.mi
<%init>
use Encode;
my $hl = encode_utf8($str);
my $find = "Я";
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很有帮助。