ウムラウトに関する Web サイトで 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 を使用して Web サイトを呼び出します。
$ 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
あるのか、それともどこで失敗するのか? このテストには、Ubuntu 12.04 で Perl 5.16 を使用しました。助けてくれてありがとう。