2016-04-27 5 views
0

Я использую Mojolicious (не Lite) вместе с CPAN::Redis.Mojolicious шаблон отображения недействительный 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 templates для этой задачи).
  • Все файлы сохраняются в UTF-8 (никакой другой кодировки не используется).
  • Если я пишу что-то по-японски внутри шаблона (жестко закодированное), оно отображается правильно.

ответ

1

Я ненавижу отвечать на мои собственные вопросы .. но я нашел решение:

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

просто. Не знаете, почему его правильно отображают на терминале ... Наверное, «Дампер» конвертирует его?

Смежные вопросы