【问题标题】:Perl - Template toolkit utf8 encoding OS optionPerl - 模板工具包 utf8 编码 OS 选项
【发布时间】:2016-12-27 18:54:31
【问题描述】:

我在使用适用于 Perl 的模板工具包时遇到了一个奇怪的问题。我一直在使用它来生成一些使用 utf8 编码的模板的自述文件,今年早些时候,生成的自述文件很好,并且是 utf8 编码的 Dos\Windows 样式,以 CR\LF 作为行结尾。不知何故,我的代码发生了一些变化,现在它以 utf8 的 Macintosh 风格生成自述文件,以 CR\CR\LF 作为行尾,这反过来又在我生成的自述文件中产生了很多不必要的间距。

代码如下:

   my $readme_tmpl = "README_tmpl.tt";
   if($os_type eq "LINUX") {
       $readme_tmpl = "README_tmpl_linux.tt";
   }
   my $data_dir = File::Spec->catdir($self->data_dir(), 'BuildSomething');
   $data_dir =~ s/\\/\//g;
   my $template = Template->new( INCLUDE_PATH => $data_dir );

   my %readme_params;

   $readme_params{build_app_name} = $pub_env->{BUILD_APP_NAME};
   $readme_params{project_name} = $self->project();

   $template->process($readme_tmpl, \%readme_params, $readme_file);

$readme_file 是新文件所在的路径。

我正在寻找将其改回 utf8 编码的 Dos/Windows 风格的方法,您有什么想法吗?

【问题讨论】:

  • 您能否创建一个minimal reproducible example 来证明您的问题?否则我们只需要猜测你的代码有什么问题。
  • 添加代码,谢谢提醒。
  • UTF8 和行尾无关。 Mac 使用一个 CR。你看到的是一个额外的回车。这可能与TT无关。您能否还包括其中一个模板和示例数据?我相信要么编辑了模板以包含其他 CR,要么您的输入现在在以前没有的地方有换行符。
  • 我的模板文件只有一个 CR,我的输入也是如此,其他没有任何改变。就在几个月前,Windows 系统上的输出是正确的,Windows 系统中发生了一些变化,将输出更改为多了一个 CR。我不知道是什么变化导致了这种情况。
  • 如果您认为您的系统发生了变化,那么恐怕我们无法帮助您诊断它。

标签: perl templates encoding utf-8


【解决方案1】:

问题解决了,这篇文章回答了我的问题I get extra CR using TT (perl template toolkit)

然后我在 process 方法上设置 binmode => 1 并且它起作用了。

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 2014-01-08
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    相关资源
    最近更新 更多