我使用 TT(perl 模板工具包)获得额外的 CR
我使用 perl v5.10(在 Windows 7 上)+ TT v2.22。当我使用 TT 时,对于每个源行,我在生成的 html 中得到一个额外的 CR
:
源文本(Windows 格式):
"Some_html" CR LF
输出文本:
"Some_html" CR
CR LF
但是,当我将源文件转换为 unix 格式时,并且然后我运行 TT,我得到:
源文本(unix 格式):
"Some_html" LF
输出文本:(
"Some_html" CR LF
我使用 notepad++ 显示 CR 和 LF 字符;还可以更改源模板中的 unix <-> windows 格式)。
当我用谷歌搜索这个问题时,我得到了一些关于 Windows 上额外 ^M
的帖子,但我找不到根本原因的解释,也没有真正的解决方案(只是一些解决方法如何获得去掉多余的 ^M
)。
虽然不是真正的问题,但我发现它很“不干净”。
是否有一些我应该打开的配置(我回顾了 www.template-toolkit.org /docs/manual/Config.html 但找不到任何东西)?
还有其他解决方案吗? (除了后期修复输出文件之外)。
谢谢
I use perl v5.10 (on windows 7) + TT v2.22. When I use TT, for each source line, I get in the produced html an extra CR
:
Source text (windows format):
"Some_html" CR LF
Output text :
"Some_html" CR
CR LF
However, when I convert my source file to unix format, and then I run TT, I get :
Source text (unix format):
"Some_html" LF
Output text :
"Some_html" CR LF
(I use notepad++ to show the CR & LF characters; also to change unix <-> windows formats in the source template).
When I google the problem, I get some (few) posts about extra ^M
on windows, but I couldn't find explanation as for the root cause neither a true solution (just some workaround how to get rid of extra ^M
).
Although not a real problem, I find it quite "unclean".
Is there some configuration that i should turn on (I reviewed www.template-toolkit.org/docs/manual/Config.html but could not find anything) ?
Some other solution ? (other than post-fixing the output file).
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Template Toolkit 以二进制模式读取模板的源文件,但以文本模式写入。模板中的数据(包含 CR LF)在文本模式输出期间被转换,因此 LF 变为 CR LF。
该问题最简单的解决方案是以二进制模式写入文件(请注意
open
调用的raw
修饰符):Template Toolkit reads source files for templates in binary mode, but writing in text mode. Data from template (that contains CR LF) are translated during output in text mode, so the LF becomes CR LF.
The easiest solution for the problem is to write files in binary mode (note the
raw
modifier toopen
call):不幸的是,bvr 的解决方案不适用于使用
[% FILTER redirect(...) %]
生成的输出。在 Windows 10 上,模板(具有 DOS 样式的 CR-LF 行结尾)通过
创建具有预期 CR-LF 行结尾的输出文件 foo.txt 进行扩展,但创建具有错误 CR-CR-LF 行结尾的 bar.txt:
我报告将此问题提交给 TT 作者 https://github.com/abw/Template2/issues/63。
我找到了一个简单的解决方案:在子 Template::_output (在 Template.pm 中)中,
更改为
在主 Perl 脚本集中
then然后您可以使用处理模板
并在主输出和重定向输出中获取 CR-LF 行结尾。
bvr's solution unfortunately doesn't work for output generated using
[% FILTER redirect(...) %]
. On Windows 10, template(with DOS-style CR-LF line endings) expanded through
creates output file foo.txt with the expected CR-LF line endings, but creates bar.txt with bad CR-CR-LF line endings:
I reported this problem to the TT author at https://github.com/abw/Template2/issues/63.
I found a simple workaround solution: In sub Template::_output (in Template.pm), change
to
Then in your main perl script set
Then you can process the template using
and get CR-LF line endings in both the main and redirected output.
祝你有美好的一天,
我找到了一个非常简单的解决方案:
此配置将指示模板引擎删除模板文本的所有前后 CR LF 。
Have a good day,
I found a very simple solution on this:
This config will instruct the template engine to remove all pre and post CR LF of the template text.