う~さんの騷がしい日々
kikyo utf-8

設定(Win10) → 時刻と言語 → 言語 → 管理用の言語の設定 → システムロケールの変更 →
「ベータ:ワールドワイド言語サポートで Unicode UTF-8 を使用」

う~さんが飛び込んで来て「旦那、これ見てや」
『うさん臭いな、これだけではサッパ解らんな!』
『しかも、1年以上ベータのままやと?何考えとるんや!』


「敵を知り、己を知れば、百戦して殆(あや)うからず」(孫子)

  • UTF-8化: 「Windows10のシステムコードをUTF-8に設定するとどうなりますか」 2021-11-29
    (錯綜しているようですね)
  • UTF-8化: 「ワールドワイド言語サポートでUnicode UTF-8を使用」は有効にすべき? 2019-11-29
    (エンドユーザーなら、βが消えてからで OKとのこと。開発者が何をすべきか知りたいんですが...)
  • Zip: 「zipの解凍&圧縮時にファイル名が文字化けする原因と解決方法」 2022-09-20
    (丁寧な解説です)
  • Java: 「JavaのUnicode入出力問題を回避する」 2020-05-20
    (Java18で UTF-8化が完了したと思ってましたが、コマンドライン引数の検証が漏れていたので検証してみます)

検証の準備

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種類用意しました。

検証してみた

  • 検証環境
  • Windows 10
  • Windows Terminal (オープンソース)、Windows PowerShell (オープンソース)
  • バッチファイル (普段は、make を使ってますが、文字化け検証のため MS 謹製ツールを使います)
  • Java 19 (オープンソース)
  • AWK˜plus for Java (オープンソース)

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 だけを特別扱いしたくない」ということでしょうが、コーページで判断するのは、難しいのでしようか?

これまでに発生した課題の対策

  • FAT は、oem言語コード(multi byte code) との記事がありましたが、ファイル名「你好(Unicode)」が作成できました。
    しかし、 Unicode 固有ファイル名は、標準ツールでは、Zip圧縮できません。
  • Zip: う~さんは、7-Zip を愛用しており圧縮時のファイル名を、UTF-8に変更しています。
    要は、標準圧縮ツールが、わざわざ Unicode を Shift_JIS にしているのが問題です。
    これは、他国の Windows 問でも発生する課題のため放置するのはおかしいですね。
utf-8_ZIP-1

「ワールドワイド言語サポート」の適用

調べても埒が明かないので「ボタン」を押しました。フラグを設定してリブートしただけの様に見えました。 2022-10-09
  • FAT のファイル名「안녕하세요、你好」(Unicode) は、正常に表示されます。
  • Zip は、Unicode 固有のファイル名が存在すると、Zip 圧縮は、以前と異なるメッセージを出力します。
    これは、空のフォルダを指定した時に出力されるメッセージでバグです。(P.S. 参照)
    7-Zip で圧縮すると問題ありません。ちなみに、標準解凍ツールは以前より UTF-8 に対応しています。
utf-8_ZIP-2

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)

  • P.S. FAT & Zip   2022-10-16
  • 「ボタン」を押す前に、FAT に下記フォルダとそのコピーを作成しましす。
    圧縮 しようとすると「使用できない文字が使われている (正常)」メッセージが出力される。
    • Hellow   (フォルダ)
    • こんにちわ.txt
    • 안녕하세요.txt
    • 你好.txt
  • 「ボタン」を押した後、圧縮しようとすると「フオルダーが空エラー (バグ)」になる。
    これは「ボタン前」に作成したフォルダでのみ発生し、フォルダをコピーまたは新規作成すると正常動作する。
    FAT には爆弾があるようで混乱しましたが、Zip 問題は、とりあえず解決しました。

「Table of contents」 2022.10.10