6

このコードの問題点:

static const std::vector<wchar_t> glyphs(
    {L'A', L'B', L'C', L'D', L'E', L'F', L'G', L'H',
     L'I', L'J', L'K', L'L', L'M', L'N', L'O', L'P',
     L'Q', L'R', L'S', L'T', L'U', L'V', L'W', L'X',
     L'Y', L'Z', L' ', L'Ä', L'Ö', L'Ü', L'Å', L' ',
     L'a', L'b', L'c', L'd', L'e', L'f', L'g', L'h',
     L'i', L'j', L'k', L'l', L'm', L'n', L'o', L'p',
     L'q', L'r', L's', L't', L'u', L'v', L'w', L'x',
     L'y', L'z', L' ', L'ä', L'ö', L'ü', L'å', L'\"',
     L'0', L'1', L'2', L'3', L'4', L'5', L'6', L'7',
     L'8', L'9', L'!', L'\"',L'#', L'$', L'%', L'&',
     L' ', L'(', L')', L'*', L'+', L',', L'-', L'.',
     L'/', L':', L';', L'<', L'=', L'>', L'?', L' ',
     L'Â', L'À', L'É', L'È', L'Ê', L'Ë', L'Î', L'Ï',
     L'Ô', L'Û', L'Ç', L'â', L'à', L'é', L'è', L'ê',
     L'ë', L'î', L'ï', L'ô', L'û', L'ç', L'\'',L' '});

まったく同じコードが警告なしでコンパイルされ、GCC と Clang で動作しますが、VS2013 では次のようになります。

warning: C4066: characters beyond first in wide-character constant ignored

..グリフ「y」、「Y」、「Â」、「Ô」、「ë」で始まる行の場合。

4

1 に答える 1

8

これを再現できる唯一の方法は、BOMなしで utf8 でエンコードされたファイルにテキストを保存することです。コンパイラは、システムのデフォルト コードページを推測し、アクセント付き文字によって生成された utf8 コードの 2 バイトをトリップします。

VS では、[ファイル] + [名前を付けて保存] を使用し、[保存] ボタンの矢印をクリックして、[エンコード付きで保存] を選択します。リストから「Unicode (署名付き UTF-8) - コードページ 65001」を選択します。

于 2014-12-30T22:01:32.117 に答える