【问题标题】:Perl Catalyst encoding issuePerl Catalyst 编码问题
【发布时间】:2015-02-06 17:19:14
【问题描述】:

这很奇怪,很难解释哪里出了问题,但我会尽力而为。

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

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

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

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

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

作为浏览器中的输出,我得到:

ÄÄÅÄ
test: ąęść

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

ąęść

【问题讨论】:

  • 你的控制器文件中有use utf8;吗?
  • 您的 TT 配置中似乎没有 ENCODING =&gt; 'utf-8'
  • 配置没问题。由于某种原因,模板文件内容已损坏。当我从模板文件中删除所有内容并将其仅放置在其中时,它可以工作...
  • @J33nn 等等,所以当你的模板包含[% some_variable %]&lt;br&gt; test: ąęść 时,你会得到ÄÄÅÄ test: ąęść,但是当你的模板只包含[% some_variable %] 而没有其他内容时,你会得到ąęść?这没有任何意义。
  • 我认为您需要将行为不端的应用程序减少到显示相同行为的最低限度。应该不难。您很可能会在此过程中自己发现问题,但是您可以在此处发布一些其他人可以使用的内容,

标签: perl utf-8 catalyst


【解决方案1】:

请查看 Catalyst Wiki 在Using UnicodeCatalyst::View::TT 提供的良好文档。 Perl Unicode Cookbook 可以帮助您更好地了解 Perl 对 UTF-8 的支持,通常比当今可用的大多数其他语言更好。

您可能需要使用编辑器保存带有 UTF-8 BOM 标记的模板,因此您的文本编辑器在保存时会正确编码您的模板文件,或者如果未设置 BOM,则至少将文件编码定义为 UTF-8每次保存。

【讨论】:

    【解决方案2】:

    在 Catalyst 的最新稳定版本 (5.90084) 中,总体上对 unicode 支持和 UTF-8 进行了大量修复。 Catalyst 现在默认是 UTF-8,但当然总有一些硬边。您应该查看有关该主题的最新文档,看看出了什么问题。

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

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2013-02-19
      • 2019-04-15
      相关资源
      最近更新 更多