【发布时间】:2013-09-13 08:01:41
【问题描述】:
我有一个使用 utf-8 编码的 mojolicous 应用程序。 我所有的文件(模板、代码、任何东西)都是 utf-8 格式。
但是对于第三方服务,我需要以 win-1251 编码显示我的页面之一。
我在启动时添加了新格式:
$self->types->type(wbm => 'text/html; charset=win-1251');
我添加模板/show/mypage.wbm.ep
<%= $txt %>
在我的控制器中,我设置了格式:
$self->render( 'show/mypage', format => 'wbm', txt => 'Превед, win1251');
当我访问 127.0.0.1:3000/show/mypage 我看到正确的类型 text/html;字符集=win-1251 以及像
这样的错误字符УУАУЅУЂУЅУЄ, win1251
我尝试在模板中进行编码,例如:
<%= Encode::encode('windows-1251',$txt) %>
并尝试在控制器中做同样的事情,但页面仍然显示不正确。
请帮帮我。
更新:
这是带有完整代码的测试项目https://github.com/korjavin/MojoWinPage。
【问题讨论】:
-
您的浏览器以什么编码方式检测文档?编码
win1251不存在,你的意思是windows-1251吗?$txt变量应该做什么,它在哪里填充?您可能想了解template language 和post-processing hooks。 -
你的源文件的编码是什么,你用的是
use utf8;吗?我猜答案是“UTF-8”和“否”(意味着你实际上没有Превед),而它们应该是“UTF-8”和“是”。 -
你试过设置
$self->renderer->encoding吗,见here? -
@amon 带有自动检测功能的浏览器显示 win-1251。如果没有'-',我只在字符串中使用它一次进行测试。感谢后期处理,我会试试的。
-
@ikegame 你说得对,我的答案是 UTF-8 和“不”。但是当我添加使用 utf8;在我的控制器类文件中,它没有任何改变。 'Превед'字符仍然很糟糕。
标签: perl encoding utf-8 mojolicious