現象
次のような状況を考えます。
-
Visual C++ プロジェクトを作成するには Microsoft Visual Studio 2008 Service Pack 1 (SP1) にします。
-
プロジェクト内のファイルには、幅の狭い文字列リテラルがあります。これらのリテラル文字列は、アジア言語の文字が含まれているし、文字"の L"では、プレフィックスが付いていません。
-
リテラル文字列は、UTF-8 エンコーディングを使用します。
このシナリオでは、プロジェクトをコンパイルすると、文字列リテラルがコンパイラによって解釈されます。さらに、次の問題のいずれかが発生します。
-
コンパイル操作は成功します。ただし、リテラル文字列が正しく表示されないで生成されたアプリケーション。さらも表示される次の警告メッセージ、プロジェクトをコンパイルするとき。
警告 C4566: ユニバーサル文字名 'xx' で表される文字は現在のコード ページでは表現できません。
-
コンパイル処理が失敗します。さらに、プロジェクトをコンパイルするとき、次のエラー メッセージが表示される可能性があります。
エラー C2078: 初期化子が多すぎます。
原因
コンパイラでは、「現象」にあるファイルは、MBCS エンコード前提としていますので、この問題が発生します。この動作のため、compilerincorrectly は、ファイルを変換します。
解決策
修正プログラムの情報
サポートされている修正プログラムは、マイクロソフトから入手可能です。ただし、この修正プログラムは、ここで説明する問題のみを修正することを目的としたものです。この問題が発生しているシステムにのみ適用してください。
修正プログラムをダウンロードできる場合は、このサポート技術情報の資料の上部に「修正プログラムのダウンロード」セクションがあります。このセクションが表示されていない場合は、マイクロソフト カスタマー サービス サポートにリクエストを送信し、修正プログラムを入手してください。 注: さらなる問題が発生した場合、またはトラブルシューティングが必要な場合には、別のサービス リクエストの作成が必要な場合があります。この修正プログラムの対象外の追加の質問および問題については、通常のサポート料金が適用されます。マイクロソフト カスタマー サービス サポートの電話番号一覧または別のサービス リクエストの作成については、次のマイクロソフト Web サイトを参照してください。http://support.microsoft.com/contactus/?ws=support 注: [修正プログラムのダウンロード] フォームには、修正プログラムが提供されている言語が表示されます。お使いの言語が表示されない場合は、その言語の修正プログラムが利用できないためです。
必要条件
この修正プログラムを適用するには、Visual Studio 2008 Service Pack 1 (SP1) がインストールされている必要があります。
再起動の必要性
Visual Studio のインスタンスが使用されていない場合は、この修正プログラムを適用した後コンピューターを再起動する必要はありません。
修正プログラムの置き換えに関する情報
この修正プログラムは他の修正プログラムを置き換えません。
ファイル情報
修正プログラム (英語版) のファイル属性は次表のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。各ファイルの日付および時刻は、世界協定時刻 (UTC) で示されています。ファイル情報に表示される時刻は、ローカル時刻に変換されています。UTC とローカル時刻との時差を確認するには、コントロール パネルの [日付と時刻] の [タイム ゾーン] タブを使用してください。
ファイル名 |
ファイル バージョン |
ファイル サイズ |
日付 |
時刻 |
プラットフォーム |
---|---|---|---|---|---|
C1.dll |
15.0.30729.4987 |
678,720 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,204,488 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,215,240 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,339,656 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,505,552 |
09-Mar-2010 |
10:18 |
x86 |
C1xx.dll |
15.0.30729.4987 |
2,891,592 |
09-Mar-2010 |
10:18 |
x64 |
状況
マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。
詳細
コンパイラでエラーを解決するには、この修正プログラムをインストールし、バイト順マークとファイルを保存します。さらに、リテラル文字列の直前に次の「プラグマ」ディレクティブをソース ファイルに追加します。
#pragma execution_character_set("utf-8")
注: 「プラグマ」ディレクティブは、「プラグマ」ディレクティブが別の「プラグマ」ディレクティブによって交換されるまで、ソース ファイルの翻訳単位を設定します。