У меня возникла проблема при отображении записей журнала из git на веб-сайте, касающемся умляутов. У меня нет идеи, где искать решения, поэтому я прошу помощи здесь. Я действительно думаю, что это может быть проблема с кодировкой, но use utf8
не повлияло на мои попытки. Я приложил некоторые усилия, чтобы объяснить проблему в надежде найти полезный ответ. Большое спасибо.
Итак, я создаю репо с умлаутами в сообщении коммита:
echo "Hello Wörld!" > a_file.txt
git init
git add a_file.txt
git commit -m "Some Ümlaut: üöä"
Теперь я могу посмотреть это в cmd, проблем не возникает:
$ git log
...
Some Ümlaut: üöä
Я также могу распечатать этот материал на Perl без проблем. Я позвоню:
use Git::Repository;
my $repo = Git::Repository->new(work_tree => ".");
my $log = $repo->run( "log" );
print "$log\n";
который дает мне тот же результат, что и пример оболочки выше.
Проблема возникает, когда я использую Mojolicious
. Вот пример:
use Mojolicious::Lite;
get '/' => sub {
my $self = shift;
use Git::Repository;
my $repo = Git::Repository->new(work_tree => ".");
my $log = $repo->run( "log" );
$self->render(text => "$log -- möre Ümläut\n" );
};
app->start;
Когда я запускаю это, умлаут в строке будет работать, но не те, которые приходят из сообщения коммита. Чтобы показать это, я могу запустить приведенный выше Perl следующим образом:
perl mojo.pl daemon
Затем я вызываю веб-сайт с помощью curl:
$ curl http://127.0.0.1:3000
...
Some Ãmlaut: üöä -- möre Ümläut
Как я уже сказал: умлауты из Git терпят неудачу, остальное в порядке.
Поэтому я подумал, что был умным и перевел их в объекты HTML:
use strict;
use warnings;
use Git::Repository;
use HTML::Entities 'encode_entities';
my $repo = Git::Repository->new(work_tree => ".");
my $log = $repo->run( "log" );
print "$log\n";
my $htmlified = encode_entities($log);
print "$htmlified\n";
Но, назвав это, хорош только первый вывод. У HTML::Entities
та же проблема, что и у Mojolicious
:
...
Some Ümlaut: üöä
...
Some Ümlaut: üöä
Дело в том, что проблема в Git::Repository
, или где я терплю неудачу? Для этих тестов я использовал Perl 5.16 на Ubuntu 12.04. Спасибо за любую помощь.