none
VisualStadio2015community の日本語の扱いについて RRS feed

  • 質問

  • VisalStadio2012proのVisualBasic(以下、VB2012)で開発していましたが、VisualStadio2015CommunityRCのVisuakBasic(以下、VB2015RC)で読み込んだところ、ほとんど問題なくビルドできました。

    しかし、VisualStadio2015CommuntyのVisualBasic(以下、VB2015)で読み込んだ場合、統合化環境ではエラーは検出されませんが、ビルドすると、日本語の変数や日本語のフォーム名で文字エラーになりビルドできません。

    日本語の変数や日本語のフォーム名は、作法から云えば良くないのは判りますが、VB2015から許されないというのは、どうかなと思います。

    更に、固定文字で、特定の文字でもビルドエラーになります。

    私のプログラムでは、SelectCaseで使った、”六”や”%”はエラーになりました。”一”や”二”等はビルドエラーになりません。

    これでは、日本語文字処理でどこかで動作エラーが起こるのではないかと不安になります。

    これは私の環境特有でしょうか、それともVB2015では2バイト文字は扱えないのでしょうか?

    2015年7月24日 0:10

回答

  • たとえば、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!)

    • 編集済み gekkaMVP 2015年7月24日 12:35
    • 回答としてマーク turutakun 2015年8月5日 5:03
    2015年7月24日 12:34
  • 以下は、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
    2015年7月24日 12:46

すべての返信

  • たとえば、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!)

    • 編集済み gekkaMVP 2015年7月24日 12:35
    • 回答としてマーク turutakun 2015年8月5日 5:03
    2015年7月24日 12:34
  • 以下は、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
    2015年7月24日 12:46
  • ご回答ありがとうございます。

    問題のプログラムは問題のあるファイルが100以上あって、簡単に変更できないので、テストプログラムを作成して試したところ、

    SJISではエラーになるものが、UTF-8で保存したら、エラーにならずコンパイル出来ました。

    UTF-8で問題ないか、確認してから変更したいと思います。

    ありがとうございました。

    

    

    2015年7月25日 2:51
  • ご回答ありがとうございます。

    確認したら、S-JISでした。VS2008のころからそのままで問題なかったので、気にもしていませんでした。

    問題のプログラムはファイル数が多いので、変更確認が大変なので、テストサンプルプログラムで確認したら、S-JISでエラーになるものが、UTF-8(65001)で保存すればエラーは出ませんでした。

    ご教示のプロジェクトファイルの書き換えは、私のスキル不足でまだ理解できない点がありますので、これから詳細に拝見し、数百あるファイルを根気に保存しなおすか、UTF-8で問題ないか合わせて検討したいと思います。

    ありがとうございました。

    2015年7月25日 2:58