[ 新規に投稿する ]

波ダッシュ、全角チルダNo.41587
ヒトカゲ さん 24/12/30 21:04 [ コメントを投稿する ]
   cmd: dir /B >list.txt はシフトジスで、波ダッシュ 〜 が含まれるファイル名もあります。 秀丸エディタで開いて、UTF-8で保存すると、波ダッシュが全角チルダに変換されて保存されるようです。
 このファイルを後で、スクリプトで処理しようとすると、トラブルの原因となることが時々あります。
 何か、スイッチで変換を止めることはできますか? 
 それとも、何かの理由でこのような仕様になっているのでしょうか。

 秀丸の使用歴はもう25年以上で、今更ほかに乗り換えられません。
[ ]
RE:41587 波ダッシュ、全角チルダNo.41588
秀まるお2 さん 24/12/31 09:52 [ コメントを投稿する ]
  こちらのWindows10とWindows11の両方の環境で、その〜の文字の入ったファイル名でファイルを1つ作って 「dir /b >list.txt」のようなテストをしたら、波ダッシュの文字は「?」に置き換わるようでした。ちょっと説明いただいた結果と違うんですが、どっちにても、それはいわゆるShift-JIS範囲外のユニコード文字が勝手に変換されたってことだろうと思います。

あと、この問題はあくまでコマンドプロンプト上での話であって、秀丸エディタは直接的には関係ないと思います。

対策ですが、いくつかあります。

■1.cmd.exeの出力をユニコード(UTF-16)にする方法

    cmd.exe /c dir /b >list.txt

のようなコマンドラインを実行してるのだとしたら、それを

    cmd.exe /u /c dir /b >list.txt

のように、cmd.exeに対して「/u」のオプションを付けると、list.txtがユニコードのUTF-16エンコードで出力されます。それだと文字化けしないです。その場合、秀丸エディタでそのlist.txtを開く時に「認識エラー」って警告が出てエンコード種類を指定しないといけなくなるので、それを防ぐために、「動作環境 - ファイル - エンコード1」の中の「ファイルの内容を解析してエンコードの種類を自動認識する」の中の「Unicode(UTF-16)」をONにしておくといいです。

■2.chcpコマンドで切り替えてから実行する方法

コマンドプロンプトを起動してそこで「dir」コマンドを実行してる場合なら、それを実行する前に、

    chcp 65001

ってコマンドを実行します。こうしてから「dir /b >list.txt」を実行すると、list.txtはUTF-8のユニコードのエンコードで出力されます。それで文字化けが回避できます。この場合は、秀丸エディタでもUTF-8を自動認識するように、先ほどの「エンコード1」の中のUTF-8をONにするのも必要になります。

■3.powershellを使う

コマンドプロンプトじゃなくてpowershellを使うと、powershellは標準でユニコード動作になってるので、「/u」や「chcp」を使わなくても勝手にユニコードになります。ただし「dir /b」はそのまま使えなくて、それは「dir -name」としないとダメらしいです。

    dir -name >list.txt

でテストしたら、list.txtはUTF-16で出力されました。

コマンドプロンプト上でのコマンド例をpowershellのコマンドに置き換える方法はネット検索すると見つかりやすいです。上記例は「dir /b powershell」でGoogle検索したら見つかりました。

■4.Windowsの設定でUTF-8にしてしまう方法

あくまでコマンドプロンプトでってことで、さらには余計なオプションやchcpコマンドも面倒ってことであれば、Windows標準でコマンドプロンプトその他をUTF-8にしてしまうことが可能です。やり方は、例えば

    https://qiita.com/Ryokhu/items/37b79a48b625b77c7b39

に方法があります。ただし、これは「ベータ」と書いてある通り、問題が起きる可能性があります。特に古いアプリで問題が出る可能性があります。うちのソフトだとパスワード総合管理なんかがうまく動かなくなります。なのであまりお勧めでは無いです。

こっち設定をしてから「dir /b >list.txt」を実行すると、list.txtはUTF-8になります。

----------------------------------------------------------
将来的なことを考えるなら「3」の解決策がいいと思いますが、とりあえず的には「1」か「2」でも策でもいいんじゃないかと思います。「4」はお勧めじゃないです。
[ ]
RE:41588 波ダッシュ、全角チルダNo.41590
ヒトカゲ さん 24/12/31 18:09 [ コメントを投稿する ]
  あるサイトに
波ダッシュ 〜 0x8160(Shift_JIS) 0x301C(UTF-8) WAVE DASH(ユニコードポイント : U+301C)
全角チルダ 〜 Shift_JIS には無い 0xFF5E(UTF-8) FULLWIDTH TILDE(ユニコードポイント : U+FF5E)
と書いてあったため、勘違いしていました。

正確には
波ダッシュ 〜 Shift_JIS には無い WAVE DASH(ユニコードポイント : U+301C)
全角チルダ 〜 0x8160(Shift_JIS) FULLWIDTH TILDE(ユニコードポイント : U+FF5E)

秀丸の その他→コマンド一覧→その他→文字コード表示 で確認できました。

ファイル名を変更するためShift_JISのバッチファイルを作るpython スクリプトを Copilot に書かせていたら、ある波文字が変換できませんと出てきたので、上記のサイトを見てそれが全角チルダであると誤解し、誤解のスパイラルに落ち込んでしまいました。

いろいろ教えていただきありがとうございます。
大変勉強になりました。
[ ]

[ 新規に投稿する ]