2016-04-27 44 views
0

我使用Mojolicious(不是Lite)和CPAN::Redis一起使用。显示无效UTF-8的Mojolicious模板

我存储一些数据,这是日本的编码以这样的方式

use Redis; 
my $redis = Redis->new; 
$redis->set("mykey",$val); 
# $val contains a string which was read from a file. 
# The value looks like: テスト 

代码后来,我读了Redis的那个值:

my $val = $redis->get("mykey"); 
print Dumper($val); #the value prints correctly in terminal 
$self->stash(
    myvalue => $val 
); 
$self->render(
    template => "/pages/test" 
); 

而且模板:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Test</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    </head> 
    <body> 
    <div><%= $myvalue %></div> 
    ... 

但它显示的值如:ã¹¹ã。

在浏览器中手动更改字符集没有区别(不按预期显示)。

为什么如果它在终端中正确显示,它在模板中显示不正确?

注:

  • 我用的base64编码/解码,并没有改变(我敢肯定,它不是Redis的)。
  • 我有日语字体和设置正确安装(我一直在使用日语编码多年,但第一次使用Mojolicious模板进行此任务)。
  • 所有文件都以UTF-8格式保存(不使用其他编码)。
  • 如果我在模板内写入了一些日文内容(硬编码),它会正确显示。

回答

1

我不想回答我自己的问题..但我找到了解决办法:

use Encode qw(decode_utf8); 
... 
$self->stash(
    myvalue => decode_utf8($val) 
); 

这么简单。不知道为什么它在终端上显示正确...可能“翻车机”正在转换它?