AWKスクリプト
コマンドライン引数とファイルの内容を表示します
## UTF8hello <File> <arguments...>
#
BEGIN { # print command line arguments
for (i = 2; i < ARGC; i++) {
print -i, ARGV[i]
ARGV[i] = ""
}
}
{
print NR, $0
}
テストデータ (UTF-8)
hello
こんにちわ
안녕하세요
你好
バッチファイル
%PLUS% UTF8hello.awk UTF8hello.txt こんにちわ 안녕하세요 你好
う~さんが、普段作成しているファイルは、
UTF-8, LF のためハマリました。
CR LF 必須とは!(次は、
LF
対応?)
UTF-8 と Shift_JIS (韓国と中国語の Shift_JIS に無いコードは文字化けします) の 2種類用意しました。
UTF-8 (CP:65001) での検証結果
コマンドライン引数は、Shift_JIS に変換されています!
Active code page: 65001
java -jar lib/awk-plus.jar UTF8hello.awk UTF8hello.txt こんにちわ 안녕하세요 你好
-2 こんにちわ
-3 ?????
-4 ?好
1 hello
2 こんにちわ
3 안녕하세요
4 你好
バッチファイル(UTF-8)
%PLUS% UTF8hello.awk UTF8hello.txt こんにちわ 안녕하세요 你好
Shift_JIS(CP:932) での検証結果
コマンドライン引数は、バッチファイル作成時点で文字化けしています
現在のコード ページ: 932
java -jar lib/awk-plus.jar UTF8hello.awk UTF8hello.txt こんにちわ ????? ?好
-2 こんにちわ
-3 ?????
-4 ?好
1 hello
2 こんにちわ
3 ?????
4 ?好
バッチファイル(Shift_JIS)
%PLUS% UTF8hello.awk UTF8hello.txt こんにちわ ????? ?好
まとめ
Java のコマンドライン解析が、一度 Shift_JIS にしている? UTF-8→Shift_JIS→UTF-16 が問題のように見えます。
「Windows だけを特別扱いしたくない」ということでしょうが、コーページで判断するのは、難しいのでしようか?
UTF-8 (CP:65001) で再検証
Active code page: 65001
java -jar lib/awk-plus.jar UTF8hello.awk UTF8hello.txt こんにちわ 안녕하세요 你好
-2 こんにちわ
-3 안녕하세요
-4 你好
1 hello
2 こんにちわ
3 안녕하세요
4 你好
気になるのは、リダイレクトしたファイルが UTF-16, BOM になっていることです。(オーバースペックですね?)
とりあえず、無事に表示され検証完了です。それにしても何が起きているのでしょうかね?
う~さんの認識は、バグっている Zip → ファイル名を持ち出すから話がややこしくなっているので、
“「ワールドワイド言語サポート」は、単に OS の外部入出力インターフェース部分の UTF-8 化である” です。(e.g. Java 18)