我在网站上显示来自 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";
这给了我与上面的 shell 示例相同的输出。
当我使用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
哪里,还是我在哪里失败?我在 Ubuntu 12.04 上使用 Perl 5.16 进行此测试。谢谢你的帮助。