85349
Visual Studio 2022でPythonファイルの文字コードをUTF-8にする方法を教えてください。  
2019では「保存オプションの詳細設定」というのがありますが、VS2022には存在しないようです。
CC BY-SA 4.0
2021-12-24T01:17:54.600
85311
2021-12-27T04:08:03.120
2021-12-24T02:19:23.800
3060
40029
question
visual-studio
Visual Studio 2022でPythonファイルの文字コードをUTF-8にする方法を教えてください。
デフォルトでは「保存オプションの詳細設定」はメニュー表示されていないでしょう。  
(おそらくVisualStudio2019でも表示されておらず、もし表示されているとしたらカスタマイズされていたのでは？)

「ファイル」メニューの「名前を付けて xxx.xxx を保存」(xxx.xxxはファイル名)を選んで手作業をたどっていく必要があります。  
こちらの記事がVisualStudio2019でそれを行う画像付きのガイドになっています。  
[Visual Studio 2019
でエンコーディングを指定してテキスト形式のファイルを保存する](https://www.ipentec.com/document/visual-
studio-save-text-file-with-specified-encoding)

下記Microsoftの記事にもありますが、「名前を付けてファイルを保存」のダイアログの「上書き保存」(または「保存」?)のボタンがドロップダウンボックスになっていて、`▼`をクリックすると「エンコード付きで保存」が現れるのでそれを選択すると「保存オプションの詳細設定」が表示されて選択出来るようになります。

Microsoftのドキュメントではこちらの記事ですね。  
[方法 : エンコーディングを使用してファイルを保存および開く](https://docs.microsoft.com/ja-
jp/visualstudio/ide/how-to-save-and-open-files-with-encoding?view=vs-2022)  
の[エンコーディングを使用してファイルを保存するには](https://docs.microsoft.com/ja-
jp/visualstudio/ide/how-to-save-and-open-files-with-encoding?view=vs-2022#to-
save-a-file-with-encoding)の部分にテキストで記述されています。この説明で「[ **保存**
]の横のドロップダウンボタン」となっているのはおそらく新規にファイルを作成した場合でしょう。既にあるファイルを編集してから保存する場合は「[
**上書き保存** ]の横のドロップダウンボタン」です。

[エンコーディングと行の終わり](https://docs.microsoft.com/ja-jp/visualstudio/ide/encodings-
and-line-breaks?view=vs-2022)  
こちらのページの「注意」のところに「[ファイル] メニューに [保存オプションの詳細設定]
が表示されない場合は、追加することができます。」としてメニューをカスタマイズして「ファイル」メニューに「保存オプションの詳細設定」を表示させる手順が示されています。

* * *

追加情報：

これらの記事で少し追加情報があります。  
[How to config visual studio to use UTF-8 as the default encoding for all
projects?](https://stackoverflow.com/q/41335199/9014308)

[What is the default encoding for source files in Visual Studio
2017?](https://stackoverflow.com/q/49623731/9014308)  
上記に付いた[回答](https://stackoverflow.com/a/61524245/9014308)で以下の状況だそうです。

  * すべてのソースコード(.cpp, .cs, .h, etc)とWebファイル(.htm(l), .css, .xml)はUTF-8 with BOM
  * しかしテキストファイルはシステムローカルのコードページ設定(日本ならCP932(ShiftJIS))

おそらくVisualStudioがデフォルトでサポートしているプログラミング言語のファイルはUTF-8 with
BOMだが、拡張機能でサポートしている言語(質問ではPython)の場合はテキストファイル扱いなのでしょう。

続けて「ツール」メニューの「オプション」「環境」「ドキュメント」の中で「コードページの文字コードでデータが保存できない場合、Unicodeでドキュメントを保存する」をチェックしておくと、「ローカルのコードページで保存出来ない場合」に自動でUTF-8
with BOMで保存してくれるそうです。ただ記述のとおりローカルのコードページで保存出来ない文字が含まれている必要があるでしょう。

他に`.editorconfig`というファイルを作ってプロジェクトに入れておくと、それ以下のフォルダ内のファイル編集に対してローカルな設定上書きが行われると書いてあります。  
[Create portable, custom editor settings with
EditorConfig](https://docs.microsoft.com/en-us/visualstudio/ide/create-
portable-custom-editor-options?view=vs-2022)

その仕様の本家のサイトを見るとPythonでも適用できそうなことが書いてありますが、  
[EditorConfig](https://editorconfig.org/)

ただしこちらの記事の最後の方でVisualStudioでサポートしているeditorconfigの項目の多くはC#用で他の言語用は改善途中らしいですね。  
[What’s New for Visual Basic in Visual Studio
2022](https://devblogs.microsoft.com/dotnet/whats-new-for-visual-basic-in-
visual-studio-2022/)
CC BY-SA 4.0
2021-12-24T02:29:04.577
85313
2021-12-25T15:54:48.793
2021-12-25T15:54:48.793
26370
26370
85311
answer
kunifさんが答えられていますがもうちょっと補足します。

EditorConfigの使用をお勧めします。[EditorConfig設定](https://docs.microsoft.com/ja-
jp/visualstudio/ide/create-portable-custom-editor-
options?view=vs-2022#supported-settings)では

> Visual Studio のエディターは、EditorConfig プロパティの次のコア セットをサポートします。
>
>   * indent_style
>   * indent_size
>   * tab_width
>   * end_of_line
>   * charset
>   * trim_trailing_whitespace
>   * insert_final_newline
>   * root
>

と説明されています。つまりプログラミング言語に依存せずこれらの設定はファイルエディターとしてサポートしています。ホームディレクトリの`.editorconfig`に

```

    root = true
    
    [*.py]
    charset = utf-8
    
```

を設定しておけば、ホームディレクトリ下に書き込まれる全ての`.py`ファイルはUTF-8で保存されます。  
といいますのも、[EditorConfigは`root=true`と記述されている設定が見つかるまで再帰的に親ディレクトリを検索する仕様](https://editorconfig.org/#file-
location)です。もちろん途中のディレクトリに`root=true`が指定されていたり、`charset`に異なる値が設定されている場合はそちらの指定に従います。  
またホームディレクトリ外にファイル保存する場合は適切なディレクトリに。
CC BY-SA 4.0
2021-12-26T00:51:09.747
85330
2021-12-26T00:51:09.747
4236
85311
answer
ご回答いただき、大変にありがとうございます。  
`.editorconfig`もプロジェクトに入れて試しているのですが、新たな不可解な現象が発生し始めました。  
削除しても発生するので、`Editor
Config`とは無関係のようですが、`view.py`をセーブすると中の日本語が文字化けを起こします。文字コードはUTF-8でしております。

[![画像の説明をここに入力](https://i.stack.imgur.com/qBfVi.png)](https://i.stack.imgur.com/qBfVi.png)
CC BY-SA 4.0
2021-12-27T04:08:03.120
85349
2021-12-27T04:08:03.120
40029
85311
answer