ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

Visual Studio 2019でAzure Functionsのテンプレートを使った時の注意点

問題点

Visual Studio 2019でAzure Functionsのテンプレートを使用すると、作成されるファイルのエンコードANSI(Shift-JIS)になります。普通に使っている分には困らないと思いますが、Azure DevOpsとかにそのままファイルを上げてしまうと、ブラウザから参照したとき、日本語部分がもれなく文字化けします。

環境

  • Visual Studio 2019 (16.1.5)
  • Azure Functions v2 (.NET Core) テンプレートを使用

Azure Functionsのアプリケーションを作成する

Visual Studio 2019を起動して、新しくAzure Functionsのアプリケーションを作成します。

f:id:masatsuna:20190706235651p:plain
Azure Functionsプロジェクトの作成

今回はAzure Functions v2 (.NET Core) のテンプレートを用います。またトリガーとかストレージアカウントとかは適当に選択します。

f:id:masatsuna:20190706235829p:plain
新しい Azure Functions アプリケーションの作成

生成されたファイルの文字コードを確認

すると、Function1.csというファイルが生成されます。実際に文字コードがどうなっているのか確認してみます。

まずFunction1.csファイルを開いて、Visual Studioの [ファイル] メニューから、[名前を付けて Function1.cs を保存] を選択します。

f:id:masatsuna:20190707000101p:plain
名前を付けて保存

[名前を付けてファイルを保存] のダイアログが開くので、[上書き保存] ボタンの右側にあるドロップダウンを開き、[エンコード付きで保存] を選択します。

f:id:masatsuna:20190707000218p:plain
エンコード付きで保存

すると、そのファイルがどの文字コードで保存されているかを確認することができます。図の通り、既定ではANSI (Shift-JIS) で保存されていることがわかります。

f:id:masatsuna:20190707000321p:plain
既定の文字コードを確認

文字コードを変更する

そのまま [エンコード] のドロップダウンから、[Unicode (UTF-8 シグネチャなし) - コードページ 65001] を選択することでBOMなしUTF-8に変更することができます。BOMありにする場合はシグネチャありのほうを選択してください。

f:id:masatsuna:20190707003427p:plain
BOMなしUTF-8に変更

新しくAzure Functionsのクラスファイルを追加した場合

プロジェクトに対して新しくAzure Functionsのクラスファイルを追加した場合も、同様に文字コードANSIになります。

f:id:masatsuna:20190707004238p:plain
新しくFunctionを追加(英語名)
f:id:masatsuna:20190707004316p:plain
文字コードANSI

ただし、追加するファイルの名前に日本語を使用した場合、文字コードはBOMなしUTF-8になります。

f:id:masatsuna:20190707004410p:plain
新しくFunctionを追加(日本語名)
f:id:masatsuna:20190707004436p:plain
文字コードはBOMなしUTF-8

プロジェクトファイルの文字コード

プロジェクトファイルは、ANSI (Shift-JIS) となります*1

f:id:masatsuna:20190707004654p:plain
プロジェクトファイルの文字コードANSI

他のエディターで無理やり文字コードを変更することはできますが、Visual Studioで変更を加えると、ANSIに戻ってしまいます。プロジェクトファイルの文字コード変更は今 (2019/7/7) のところ諦めるしかないかもしれません。よくわからない謎仕様ですね。UTF-8にそろえるようフィードバックを出しておきました。


2019/07/16 追記 この件バグとして取り扱ってもらえたようです。Azure FunctionsのGitHubにバグとして取り込まれました。詳細は以下より参照ください。

github.com

*1:サクラエディターで確認しています。