VS2013和Unicode文字提供警告

juz*_*lin 3 c++ unicode visual-studio-2013 unicode-literals

这段代码有什么问题:

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' '});
Run Code Online (Sandbox Code Playgroud)

完全相同的代码片段在没有警告的情况下编译并与GCC和Clang一起工作,但是对于VS2013,我得到:

warning: C4066: characters beyond first in wide-character constant ignored
Run Code Online (Sandbox Code Playgroud)

..对于以字形"y","Y","Â","Ô"和"ë"开头的行.

Han*_*ant 6

只有一种方法可以重现这一点,将文本保存到没有 BOM的utf8编码的文件中.编译器将猜测系统默认代码页并跳过重音字符产生的utf8代码中的双字节.

在VS中,使用文件+另存为,单击保存按钮上的箭头,然后选择"使用编码保存".从列表中选择"Unicode(带签名的UTF-8) - 代码页65001".