2

ウムラウトに関する 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 を使用しました。助けてくれてありがとう。

4

1 に答える 1