2016-04-27 52 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) 
); 

這麼簡單。不知道爲什麼它在終端上顯示正確...可能「翻車機」正在轉換它?