【问题标题】:Only one page need to be shown at specific encoding只需要以特定编码显示一页
【发布时间】: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 languagepost-processing hooks
  • 你的源文件的编码是什么,你用的是use utf8;吗?我猜答案是“UTF-8”和“否”(意味着你实际上没有Превед),而它们应该是“UTF-8”和“是”。
  • 你试过设置$self-&gt;renderer-&gt;encoding吗,见here
  • @amon 带有自动检测功能的浏览器显示 win-1251。如果没有'-',我只在字符串中使用它一次进行测试。感谢后期处理,我会试试的。
  • @ikegame 你说得对,我的答案是 UTF-8 和“不”。但是当我添加使用 utf8;在我的控制器类文件中,它没有任何改变。 'Превед'字符仍然很糟糕。

标签: perl encoding utf-8 mojolicious


【解决方案1】:

解决了

  1. 部分渲染
  2. 编码
  3. 作为原始数据发送
my $page = $self->render( 'show/mypage', format => 'wbm', txt => $txt, partial> => 1);
my $win=Mojo::Util::encode ('cp-1251',$page);
$self->render(data=>$win);

感谢 Sebastian Riedel (https://groups.google.com/forum/#!topic/mojolicious/bX_LLQIsop8)

【讨论】:

    猜你喜欢
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    相关资源
    最近更新 更多