VSCodeはパスに特定の記号が含まれているとデバッグできない？（Python）

タイトル通りなのですが…
バグなのでは？

- 確認したバージョンは以下の通りです。
  - VS Code 1.51.0, 1.88.1
  - Python 3.8.5, 3.11.0
  - Java 22.0.1

~~Python以外のデバッグできる言語を使っていないので他の言語は不明です…。~~
⇒ Javaでも起きます。2回目以降のデバッグでcdする際にパスが変化してデバッグの際エラーになります。（デバッグ自体は可能）

# 追記24/05/03：GitHubにIssue出しました
https://github.com/microsoft/vscode-python/issues/23269

が、なんか反応が鈍い…
もし一度でも困ったことがある方いましたら、よければIssueに「私も困ってるんですが」的なコメント等いただけると、重要性が伝わりそうなので良ければよろしくお願いします！

# 追記：最下部に解決法が書いてあります
「追記３：解決法が（一応）わかりました」のとこ。
（こんなポンコツ記事でもお役に立てたら嬉しいです）

# デバックの開始時にパスから記号が削除される

```PowerShell:ターミナル
PS C:\Users\User\Documents\○個人用ファイル>  & 'C:\Program Files\Python38\python.exe' 'c:\Users\User\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '62606' '--' 'c:\Users\User\Documents\個人用ファイル\test.py'
Traceback (most recent call last):
  File "C:\Program Files\Python38\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\Python38\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
    cli.main()
  File "c:\Users\User\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 430, in main
    run()
  File "c:\Users\User\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 267, in run_file
    runpy.run_path(options.target, run_name=compat.force_str("__main__"))
  File "C:\Program Files\Python38\lib\runpy.py", line 264, in run_path
    code, fname = _get_code_from_file(run_name, path_name)
  File "C:\Program Files\Python38\lib\runpy.py", line 234, in _get_code_from_file
    with io.open_code(decoded_path) as f:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\User\\Documents\\個人用ファイル\\test.py'
PS C:\Users\User\Documents\○個人用ファイル> 
```

`python.exe`に渡しているパスから記号（○）が消えてしまっています。
今まで（VSCodeを使い始める前）は日本語は通常通り使えていたので、丸の記号がダメみたいです。
困るんですけど…。

フォルダ名を変更しなくてもなんとかできる方法ないですかね…。


# どの文字が消えるのか検証してみる
ShiftJISの記号のどこが消されてるのか確認してみます。
なお、Pythonコードの内容は`print("success")`だけ。

<details>
<summary>検証コード（邪魔なので折り畳み）</summary>
```PowerShell:0_半角カナ
PS C:\Users\Ika3\Documents\テスト用>  cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63779' '--' 'c:\Users\Ika3\Documents\テスト用\0_半角カナｰｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝﾞﾟ\test.py' 
Traceback (most recent call last):
  （省略）
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\Ika3\\Documents\\テスト用\\0_半角カナｰｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝﾞﾟ\\test.py'
PS C:\Users\Ika3\Documents\テスト用\0_半角カナ｡｢｣､･ｦｧｨｩｪｫｬｭｮｯｰｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝﾞﾟ> 
```

```PowerShell:1_普通の記号
PS C:\Users\Ika3\Documents\テスト用>  cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63788' '--' 'c:\Users\Ika3\Documents\テスト用\1_普通の記号　、。，．：；？！｀＾￣＿ヽヾゝゞ〃仝々〆〇ー／＼～｜（）〔〕［］｛｝〈〉《》「」『』【】＋－＝＜＞￥＄￠￡％＃＆＊＠〒〓￢Å\test.py' 
Traceback (most recent call last):
  （省略）
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\Ika3\\Documents\\テスト用\\1_普通の記号\u3000、。，．：；？！｀＾￣＿ヽヾゝゞ〃仝々〆〇ー／＼～｜（）〔〕［］｛｝〈〉《》「」『』【】＋－＝＜＞￥＄￠￡％＃＆
＊＠〒〓￢Å\\test.py'
PS C:\Users\Ika3\Documents\テスト用\1_普通の記号　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈〉《》「」『』【】＋－±×÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓∈∋⊆⊇⊂⊃∪∩∧∨￢⇒⇔∀∃・∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬Å‰♯♭♪†‡¶◯>
```

```PowerShell:2_全角数字等
PS C:\Users\Ika3\Documents\テスト用>  cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63734' '--' 'c:\Users\Ika3\Documents\テスト用\2_全角文字０１２３４５６７８９ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ\test.py' 
success
PS C:\Users\Ika3\Documents\テスト用\2_全角文字０１２３４５６７８９ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ> 
```

```PowerShell:3_普通のかなカナ
PS C:\Users\Ika3\Documents\テスト用>  cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63742' '--' 'c:\Users\Ika3\Documents\テスト用\3_普通のかなカナぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわ 
ゐゑをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ\test.py' 
success
PS C:\Users\Ika3\Documents\テスト用\3_普通のかなカナぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんァアィ
イゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ>
```

```PowerShell:4_ギリシャ文字
PS C:\Users\Ika3\Documents\テスト用>  cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63747' '--' 'c:\Users\Ika3\Documents\テスト用\4_ギリシャ文字ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω\test.py' 
success
PS C:\Users\Ika3\Documents\テスト用\4_ギリシャ文字ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω> 
```

```PowerShell:5_キリル文字
PS C:\Users\Ika3\Documents\テスト用>  cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63754' '--' 'c:\Users\Ika3\Documents\テスト用\5_キリル文字АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя\test.py' 
success
PS C:\Users\Ika3\Documents\テスト用\5_キリル文字АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя> 
```

```PowerShell:6_罫線
PS C:\Users\Ika3\Documents\テスト用>  cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63797' '--' 'c:\Users\Ika3\Documents\テスト用\6_罫線\test.py' 
Traceback (most recent call last):
  （省略）
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\Ika3\\Documents\\テスト用\\6_罫線\\test.py'
PS C:\Users\Ika3\Documents\テスト用\6_罫線─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂> 
```

```PowerShell:7_機種依存文字
PS C:\Users\Ika3\Documents\テスト用>  cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63768' '--' 'c:\Users\Ika3\Documents\テスト用\7_機種依存文字ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟㏍㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼\test.py' 
Traceback (most recent call last):
  （省略）
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\Ika3\\Documents\\テスト用\\7_機種依存文字ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟㏍㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼\\test.py'
PS C:\Users\Ika3\Documents\テスト用\7_機種依存文字①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ・㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪> 
```

</details>

## 結果
Unicodeのなんやかんやが関係してそう？かも？
その辺は全く知らないので結果がバラけている！としかいえない…

### 消える
- 0_半角カナ
｡｢｣､･ｦｧｨｩｪｫｬｭｮｯ

- 1_普通の記号
・゛゜´¨―‐∥…‥‘’“”±×÷≠≦≧∞∴♂♀°′″℃§☆★○●◎◇◆□■△▲▽▼※→←↑↓∈∋⊆⊇⊂⊃∪∩∧∨⇒⇔∀∃・∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬‰♯♭♪†‡¶◯

- 6_罫線（全滅） 
─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂

- 7_機種依存文字
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳・№℡≒≡∫∮∑√⊥∠∟⊿∵∩∪


### 消えない
- 0_半角カナ
ｰｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝﾞﾟ

- 1_普通の記号
　、。，．：；？！｀＾￣＿ヽヾゝゞ〃仝々〆〇ー／＼～｜（）〔〕［］｛｝〈〉《》「」『』【】＋－＝＜＞￥＄￠￡％＃＆＊＠〒〓￢Å

- 2_全角数字系
*（全て残る）*
- 3_普通のかなカナ
*（全て残る）*
- 4_ギリシャ文字
*（全て残る）*
- 5_キリル文字
*（全て残る）*


- 7_機種依存文字
ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟㏍㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼


# 追記：原因はPowerShellの不具合
PowerShellの``PSReadLine``モジュールの不具合だそうです。

参考URL：[windows - PowerShell(x64)のウィンドウに、ファイル名に記号を含むファイルをドラッグ＆ドロップすると文字が欠落してしまう - スタック・オーバーフロー](https://ja.stackoverflow.com/questions/55494/powershellx64%E3%81%AE%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AB-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%AB%E8%A8%98%E5%8F%B7%E3%82%92%E5%90%AB%E3%82%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0-%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%81%99%E3%82%8B%E3%81%A8%E6%96%87%E5%AD%97%E3%81%8C%E6%AC%A0%E8%90%BD%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86)
参考URL2：[PowerShell で全角文字を入力すると表示がおかしくなる問題について](https://social.technet.microsoft.com/Forums/ja-JP/862dda39-0c53-447c-b4bd-05e147a4f9e4/powershell?forum=Wcsupportja)

これは、PowerShellの文字に色を付けて見やすくする機能が全角文字を扱うの下手くそ（意訳）だという不具合だそうなのですが…
それに関連して、PowerShellのウィンドウにファイルをドラッグ＆ドロップで渡すと特定の記号が消失する、という不具合も発生しているようです。

VSCodeのデバッグ時にパスを渡すときにドラッグ＆ドロップのような方法でパスを渡しているらしく、それのせいで上述の記号が消失し、パスが違うものになってしまっているみたい。

なお、22年9月現在もこの不具合は全く修正されていないようです。

## 解決策案
- パスに全角文字が入らないようにする
  - 解決してない
- VSCodeの設定の``terminal.integrated.defaultProfile.windows``から、既定のターミナルを``cmd.exe``に変更する
  - せっかくのPowerShellを使わなくなるが、楽
- PowerShellから``PSReadLine``を``Remove-Module``もしくは`Uninstall-Module`する
  - いろいろ試したが、できなかった。色を付けるだけのモジュールらしいので、できるならこれが手軽かも
参考：[Stack Overflow](https://stackoverflow.com/questions/42626470/powershell-5-1-how-to-uninstall-module-which-is-currently-use)
  - 追記：管理者権限の`cmd.exe`から`PowerShell Uninstall-Module PSReadLine -RequiredVersion 2.0.0`というようにやるといいかも？~~（未確認）~~
  - 追記２：上記コマンドを実行しても、アンインストールされずに2.0.0がしつこく残り続ける。
- PowerShellの``PSReadLine``を``Install-Module``もしくは``Update-Module``してバージョンを``2.2.6``にし、``PSReadLine``を読み込めなくする
  - 解決策として頭が悪い（偶然読み込まなくなっただけ…というかなんで読み込まなくなったのかナゾ）
  - 追記：PSスクリプトファイルを実行できるようにするために`Set-ExecutionPolicy RemoteSigned`でセキュリティを緩くしたところ、再び`PSReadLine`が読み込まれるようになった。日本語が表示できなくなるので困る。よくわかっていないが、要するにアップデートしたことによって署名が無効なモジュールになったせいで読み込めなくなった…ということだったみたい？（困る）
  - 追記２：一時的に`Set-ExecutionPolicy AllSigned`にして`PSReadLine`を再インストールしようとしたところ、「署名が無効です」的なエラーが出てインストールできなくなっていた。
`Install-Module PSReadLine -Force -SkipPublisherCheck`で署名の検証をスキップすることでインストールを強行したところ、再び`PSReadLine`を読み込めなくなり、再びPythonコードをデバッグできるようになった。
加えてなんと、`Set-ExecutionPolicy RemoteSigned`の状態でも`PSReadLine`を読み込まなくなった。
めでたしめでたし。（めでたくない）
  - 追記３：結局なんで`PSReadLine`を読み込まなくなったのかよくわかっていなかったが、やっと原理がわかった。上記の追記２ではなんで読み込まなくなったのかわかっていなかった。（後述）

## 追記３：解決法が（一応）わかりました
### 方法1
1. 管理者権限のPowerShellを起動しておく
1. `Install-Module PSReadLine -Force`を実行し、バージョンの新しい`PSReadLine`をインストールする
1. `Set-ExecutionPolicy`で実行ポリシーの変更をしていなければ、PowerShell起動時にインストールした`PSReadLine`を読み込もうとして失敗するようになる
1. 悪さをしているへっぽこ`PSReadLine`がいなくなるので、どんな全角文字でもPowerShellに渡せるようになる
1. めでたしめでたし

### 方法2
スクリプトファイル`*.ps1`の実行のために`Set-ExecutionPolicy  RemoteSigned`してあり、上記の方法1ではPowerShell起動時に`PSReadLine`を読み込んでしまう場合。
1. 管理者権限のPowerShellを起動しておく
1. `Get-ExecutionPolicy -List`で現在の実行ポリシーの状態を表示し、覚えておく
1. `Set-ExecutionPolicy AllSigned`を実行し、実行ポリシーを`AllSigned`に変更する
1. PowerShellで`Install-Module PSReadLine -Force`を実行し、バージョンの新しい`PSReadLine`をインストールする
1. PowerShellを新しく起動し、インストールした`PSReadLine`を読み込もうとして下記のメッセージが出る
    ```
    この信頼されていない発行元からのソフトウェアを実行しますか?
    ファイル C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.3.4\PSReadLine.format.ps1xml の発行元は
    CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
    であり、このシステムで信頼されていません。信頼された発行元からのスクリプトのみを実行してください。
    [V] 常に実行しない(V)  [D] 実行しない(D)  [R] 一度だけ実行する(R)  [A] 常に実行する(A)  [?] ヘルプ (既定値は "D"):
    ```
1. `[V] 常に実行しない(V)`を選択し、Microsoftの証明書を信頼しない発行元に追加してしまう（強引）
1. 以降、`PSReadLine`を読み込みたくても読み込まなくなる
1. めでたしめでたし
1. 忘れずに`Set-ExecutionPolicy RemoteSigned`（もしくは他のポリシー）を実行し、実行ポリシーを1.の状態に戻しておく

ほかにもMicrosoft製モジュールをインストールしている場合、そっちも問答無用で読み込まなくなりそう…
なお、信頼しない設定を解除したい場合は
 コントロールパネル＞インターネットオプション＞コンテンツ＞証明書＞信頼されない発行元＞Microsoft Corporation
で「削除」を行うことで設定を解除することができる。


# 参考ページ
同じ現象について言及しているブログ

https://blog.macorin.net/powershell-disappear-middle-black/

`Set-ExecutionPolicy`解説ページ

https://atmarkit.itmedia.co.jp/ait/articles/0805/16/news139.html

`Install-Module`で署名の検証を突破する方法

https://qiita.com/akiy502/items/a592b54d44e822b99a75

ただの文字コード表

https://seiai.ed.jp/sys/text/java/shiftjis_table.html

「常に実行しない」の解除方法

https://nasunoblog.blogspot.com/2014/06/powershell-code-signing-select-never-run.html

https://mycsharpdeveloper.wordpress.com/2020/10/04/how-to-revoke-a-powershell-trusted-publisher-certificate/