koi8-r 文本显示不正确

问题描述 投票:0回答:2

下面是尝试将 koi8-r 单字节编码的文本输出到浏览器的代码。 我把它保存在 koi8-r 的 Emacs 中:

#!/usr/bin/perl
use Mojolicious::Lite;
no utf8;

get '/' => sub {
    my $c = shift;

    $c->res->headers->content_type('text/plain; charset=KOI8-R');

    # Respond with plain text
    $c->render(text => "Hello, World! Текст на русском однобитный.");
};

app->start;

我工作,但不是“你好,世界!Текст на русском однобитный”。在 Firefox 中我看到:

你好,世界! ц╢ц┘ц▀ц⌠ц■ ц▌ц│ ц▓ц∙ц⌠ц⌠ц▀ц▐ц█ ц▐ц└ц▌ц▐ц┌ц┴ц■ц▌ц≥ц┼.

单击“查看”-“修复文本编码”后,我得到:

你好,世界! ôËÓÔ ÎÁ ÒÕÓÓËÏÍ ÏäÎÏâÉÔÎÙÊ。

我似乎是在 Windows-1252 而不是 koi8-r 中解释“Текст на русском однобитный”,这就是为什么我看到“ôÅËÓÔ ÎÁ ÒÕÓÓËÏÍ ÏäÎÏÂÉÔÎÙÊ”。

出了什么问题?也许

render
函数无法使用单字节编码?

perl encoding mojolicious
2个回答
0
投票

试试这个:

#!/usr/bin/env perl
use Mojolicious::Lite -signatures;

use utf8;

get '/' => sub {
    my $c = shift;

    $c->res->headers->content_type('text/plain; charset=UTF-8');

    # Respond with plain text
    $c->render(text => "Hello, World! Текст на русском однобитный.");
};
app->start;

0
投票

您可以使用

data
而不是
text
作为渲染目标。数据仅发送原始字节,并且不由
Mojolicious::Renderer
的集合
encoding
进行编码。我也尝试过设置
app->renderer($encoding)
但浏览器仍然渲染不正确,所以我认为使用 bytes 是唯一的方法。

#!/usr/bin/perl
use Mojolicious::Lite;
no utf8;

my $encoding = 'koi8-r';

get '/' => sub {
    my $c        = shift;
    $c->res->headers->content_type("text/html;charset=$encoding");
    $c->render( data => 'Hello, World! Текст на русском однобитный.' );
};

app->start;
© www.soinside.com 2019 - 2024. All rights reserved.