我在写一个脚本,它以UTF-16编码的文本文件作为输入并输出一个UTF-16编码的文本文件。UTF-16 perl输入输出
use open "encoding(UTF-16)";
open INPUT, "< input.txt"
or die "cannot open > input.txt: $!\n";
open(OUTPUT,"> output.txt");
while(<INPUT>) {
print OUTPUT "$_\n"
}
我们只是说我的程序写入从input.txt到output.txt的所有内容。
这工作完全正常在我的cygwin环境,这是使用“这是cygwin的线程多64int内置的Perl 5,版本14,颠覆2(v5.14.2)”
但在我的Windows环境,它使用“这是perl 5,版本12,为MSWin32-x64-multi-thread构建的subversion 3(v5.12.3)”,
output.txt中的每一行都预先添加了疯狂的符号第一行。
例如:
<FIRST LINE OF TEXT>
㈀ Ⰰ ㈀Ⰰ 嘀愀 ㌀ 䌀栀椀愀 䐀⸀⸀⸀ 儀甀愀渀最 䠀ഊ<SECOND LINE OF TEXT>
...
谁能给出为什么它在Cygwin上而不是窗户的一些见解?
编辑:按照建议打印编码图层后。
在Windows环境:
unix
crlf
encoding(UTF-16)
utf8
unix
crlf
encoding(UTF-16)
utf8
在Cygwin环境:
unix
perlio
encoding(UTF-16)
utf8
unix
perlio
encoding(UTF-16)
utf8
唯一的区别是所述PerlIO的和CRLF层之间。
也许那些“疯狂的符号”是无论你正在使用查看它们不显示UTF16窗口;) –
我使用记事本+ +显示output.txt的。如果我使用cygwin运行脚本并生成文件,它工作得很好,但当我使用Windows运行脚本时,它也充满了疯狂的符号 – allenylzhou
尝试将Windows Perl升级到5.14或5.16,这将消除这种可能性一个5.12的错误。可以是[Strawberry Perl](http://strawberryperl.com/)或[ActivePerl](http://www.activestate.com/activeperl/downloads)。 – Schwern