トップ回答者
VisualStadio2015community の日本語の扱いについて

質問
-
VisalStadio2012proのVisualBasic(以下、VB2012)で開発していましたが、VisualStadio2015CommunityRCのVisuakBasic(以下、VB2015RC)で読み込んだところ、ほとんど問題なくビルドできました。
しかし、VisualStadio2015CommuntyのVisualBasic(以下、VB2015)で読み込んだ場合、統合化環境ではエラーは検出されませんが、ビルドすると、日本語の変数や日本語のフォーム名で文字エラーになりビルドできません。
日本語の変数や日本語のフォーム名は、作法から云えば良くないのは判りますが、VB2015から許されないというのは、どうかなと思います。
更に、固定文字で、特定の文字でもビルドエラーになります。
私のプログラムでは、SelectCaseで使った、”六”や”%”はエラーになりました。”一”や”二”等はビルドエラーになりません。
これでは、日本語文字処理でどこかで動作エラーが起こるのではないかと不安になります。
これは私の環境特有でしょうか、それともVB2015では2バイト文字は扱えないのでしょうか?
回答
-
たとえば、VS2013とかでもWindowsのシステムロケールを日本以外にしておいて、SJISのファイルを含めてコンパイルすると同じようなエラーが出ます。
エラーになるコードが書かれているファイルのエンコードがUnicode(65001)以外になっていませんか?
そのファイルをVSで開いて選択して、メニューのファイル->保存オプションの詳細設定でエンコードが何になっていますか?
エンコードをUnicode(65001)にして上書き保存してからコンパイルするとどうなりますか?
エンコードを変更したくない場合、コンパイラにファイルのエンコードが何かを明示してやればコンパイルできることもあります。
vbcを直接つかってコンパイルするのは面倒なので、プロジェクトファイル(*.vbproj)を開いて、
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <PropertyGroup> <!-- 省略 --> <!-- 以下の行を追加して、コードページを一致させること --> <CodePage>932</CodePage> </PropertyGroup> (以下略)
のようにコードページを指定すると、そのコードページを使ってファイルを読み取ってもらえます。
その他全てのプロジェクトも完全にSJISだけでいいというのであれば、%ProgramFiles%\MSBuild\14.0\Microsoft.Common.propsに同じように
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- 省略 --> <PropertyGroup> <CodePage>932</CodePage> </PropertyGroup> </Project Tools>
という一文を追加しても同じような効果になります。
RCだとコンパイル成功するので、以降で読み込みのデフォルトをUnicodeにしてしまうような変更が入ってしまったんでしょうかね。
#今までエンコード指定なしでも読めてしまっていたとも言えますが
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
以下は、C#に関する記事ですが参考になるかもしれません。
C#のコードがvisual studio 2015だとコンパイルエラーになる
http://qiita.com/azechi/items/ed75a5f7329831fb4fac
同じプロジェクト、ソリューションをVisualStudio2013で開くとコンパイルは成功する。
shift-jisの.csファイルに"文字列"、識別子に日本語があるとコンパイルエラーになる。
CS1056 予期しない文字 '文字' です。
CS1009 認識できないエスケープ シーケンスです。
ほかファイルエンコーディングをutf-8にすれば解決する。
(中略)
それと、識別子に"・"、"・"を使っている場合はファイルがutf-8であってもVisualStudio2015が使用するcscではコンパイルエラーになる。
- 回答としてマーク turutakun 2015年8月5日 5:03
すべての返信
-
たとえば、VS2013とかでもWindowsのシステムロケールを日本以外にしておいて、SJISのファイルを含めてコンパイルすると同じようなエラーが出ます。
エラーになるコードが書かれているファイルのエンコードがUnicode(65001)以外になっていませんか?
そのファイルをVSで開いて選択して、メニューのファイル->保存オプションの詳細設定でエンコードが何になっていますか?
エンコードをUnicode(65001)にして上書き保存してからコンパイルするとどうなりますか?
エンコードを変更したくない場合、コンパイラにファイルのエンコードが何かを明示してやればコンパイルできることもあります。
vbcを直接つかってコンパイルするのは面倒なので、プロジェクトファイル(*.vbproj)を開いて、
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <PropertyGroup> <!-- 省略 --> <!-- 以下の行を追加して、コードページを一致させること --> <CodePage>932</CodePage> </PropertyGroup> (以下略)
のようにコードページを指定すると、そのコードページを使ってファイルを読み取ってもらえます。
その他全てのプロジェクトも完全にSJISだけでいいというのであれば、%ProgramFiles%\MSBuild\14.0\Microsoft.Common.propsに同じように
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- 省略 --> <PropertyGroup> <CodePage>932</CodePage> </PropertyGroup> </Project Tools>
という一文を追加しても同じような効果になります。
RCだとコンパイル成功するので、以降で読み込みのデフォルトをUnicodeにしてしまうような変更が入ってしまったんでしょうかね。
#今までエンコード指定なしでも読めてしまっていたとも言えますが
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
以下は、C#に関する記事ですが参考になるかもしれません。
C#のコードがvisual studio 2015だとコンパイルエラーになる
http://qiita.com/azechi/items/ed75a5f7329831fb4fac
同じプロジェクト、ソリューションをVisualStudio2013で開くとコンパイルは成功する。
shift-jisの.csファイルに"文字列"、識別子に日本語があるとコンパイルエラーになる。
CS1056 予期しない文字 '文字' です。
CS1009 認識できないエスケープ シーケンスです。
ほかファイルエンコーディングをutf-8にすれば解決する。
(中略)
それと、識別子に"・"、"・"を使っている場合はファイルがutf-8であってもVisualStudio2015が使用するcscではコンパイルエラーになる。
- 回答としてマーク turutakun 2015年8月5日 5:03
-
ご回答ありがとうございます。
確認したら、S-JISでした。VS2008のころからそのままで問題なかったので、気にもしていませんでした。
問題のプログラムはファイル数が多いので、変更確認が大変なので、テストサンプルプログラムで確認したら、S-JISでエラーになるものが、UTF-8(65001)で保存すればエラーは出ませんでした。
ご教示のプロジェクトファイルの書き換えは、私のスキル不足でまだ理解できない点がありますので、これから詳細に拝見し、数百あるファイルを根気に保存しなおすか、UTF-8で問題ないか合わせて検討したいと思います。
ありがとうございました。