波ダッシュ、全角チルダ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 に書かせていたら、ある波文字が変換できませんと出てきたので、上記のサ
イトを見てそれが全角チルダであると誤解し、誤解のスパイラルに落ち込んでしまい
ました。

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

[ ]