2016-04-27 4 views
0

Mojolicious(ライトではない)とCPAN::Redisを一緒に使用しています。無効なUTF-8を表示するモホリズムテンプレート

私はこのように日本のエンコードされているいくつかのデータを格納しています:

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) 
); 

を。なぜそれがターミナルで正しく表示されるのかわからない...恐らく "ダンパー"はそれを変換しているのだろうか?

関連する問題