2015-02-06 59 views
0

这是奇怪的,很难解释什么是错的,但我会尽我所能。Perl催化剂编码问题

由于某些原因模板的值改变了他们的编码(我很确定他们是)。

控制器文件(编码UTF-8):

print STDERR "ąęść"; 
$c->stash->{some_variable} = "ąęść"; # some unicode chars 

模板文件(以UTF-8编码):

[% some_variable %]<br> 
test: ąęść 

如在浏览器输出我得到:

ÄÄÅÄ 
test: ąęść 

控制台上的输出(启用UTF-8编码):

ąęść 
+1

你在你的控制器文件中有'use utf8;'吗? – ThisSuitIsBlackNot 2015-02-06 17:27:23

+4

看起来你的TT配置中没有'ENCODING =>'utf-8'。 – Borodin 2015-02-06 17:53:16

+0

配置没问题。出于某种原因,模板文件内容已损坏。当我从模板文件中删除所有东西,并将其中只有变量,它的作品... – J33nn 2015-02-06 18:14:39

回答

2

请看看Catalyst Wiki在Using UnicodeCatalyst::View::TT提供的良好文档。 Perl Unicode Cookbook可帮助您更好地理解UTF-8的Perl支持,通常比现在可用的其他语言更好。

您可能需要使用编辑器保存带有UTF-8 BOM标记的模板,以便您的文本编辑器在保存时确实编码了您的模板文件,或者如果不设置BOM,则至少将文件编码定义为UTF- 8每次你保存它。

1

对于unicode支持和UTF-8,通常有催化剂(5.90084)的最新稳定版本有很多修复。 Catalyst现在默认为UTF-8,但当然总是有一些硬边缘。您应该查看有关该主题的最新文档,以查看发生了什么问题。

如果您的模板包含多字节字符,那么确实需要设置BOM或查看您选择的模板视图的文档。