UTF-16 でエンコードされたテキスト ファイルを入力として受け取り、UTF-16 でエンコードされたテキスト ファイルを出力するスクリプトを作成しています。
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-thread-multi-64int 用に構築された perl 5、バージョン 14、サブバージョン 2 (v5.14.2) です」を使用している私の cygwin 環境では完全に機能します。
しかし、「これはMSWin32-x64-multi-thread用に構築されたperl 5、バージョン12、サブバージョン3(v5.12.3)です」を使用している私のWindows環境では、
output.txt のすべての行には、最初の行を除いてクレイジーな記号が付加されています。
例えば:
<FIRST LINE OF TEXT>
㈀ Ⰰ ㈀Ⰰ 嘀愀 ㌀ 䌀栀椀愀 䐀⸀⸀⸀ 儀甀愀渀最 䠀ഊ<SECOND LINE OF TEXT>
...
Windowsではなく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 層の間です。