我正在编写一个脚本,它以UTF-16编码的文本文件作为输入,并输出一个UTF-16编码的文本文件。
在Cygwin环境中:
唯一的区别在于perlio和crlf层之间。
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。
在使用“ This is perl 5,version 14,subversion 2(v5.14.2)built for cygwin-thread-multi-64int”的cygwin环境中,这个程序完美地工作。
但是在使用“ This is perl 5,version 12,subversion 3(v5.12.3)built for MSWin32-x64-multi-thread”的Windows环境中,除了第一行之外,output.txt中的每一行都以疯狂的符号为前缀。
例如:
<FIRST LINE OF TEXT>
㈀ Ⰰ ㈀Ⰰ 嘀愀 ㌀ 䌀栀椀愀 䐀⸀⸀⸀ 儀甀愀渀最 䠀ഊ<SECOND LINE OF TEXT>
...
有人能解释一下为什么在Cygwin上能够运行,但在Windows上不能吗?
编辑:按照建议打印编码层后,在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层之间。