Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MSVC上的双字节编码(std::codecvt):无法识别前导字节_C++_Windows_Visual C++_Unicode_Character Encoding - Fatal编程技术网

C++ MSVC上的双字节编码(std::codecvt):无法识别前导字节

C++ MSVC上的双字节编码(std::codecvt):无法识别前导字节,c++,windows,visual-c++,unicode,character-encoding,C++,Windows,Visual C++,Unicode,Character Encoding,我想使用Microsoft标准库实现(MSVC11)将双字节代码页中编码的字符串转换为UTF-16字符串。例如,考虑下面的程序: #include <iostream> #include <locale> int main() { // KATAKANA LETTER A (U+30A2) in Shift-JIS (Codepage 932) // http://msdn.microsoft.com/en-us/goglobal/cc305152

我想使用Microsoft标准库实现(MSVC11)将双字节代码页中编码的字符串转换为UTF-16字符串。例如,考虑下面的程序:

#include <iostream>
#include <locale>

int main()
{
    // KATAKANA LETTER A (U+30A2) in Shift-JIS (Codepage 932)
    // http://msdn.microsoft.com/en-us/goglobal/cc305152
    char const cs[] = "\x83\x41";

    std::locale loc = std::locale("Japanese");

    // Output: "Japanese_Japan.932" (as expected)
    std::cout << loc.name() << '\n';

    typedef std::codecvt<wchar_t, char, std::mbstate_t> cvt_t;
    cvt_t const& codecvt = std::use_facet<cvt_t>(loc);
    wchar_t out = 0;
    std::mbstate_t mbst = std::mbstate_t();
    char const* mid;
    wchar_t* outmid;

    // Output: "2" (error) (expected: "0" (ok))
    std::cout << codecvt.in(
        mbst, cs,   cs + 2,   mid,
              &out, &out + 1, outmid) << '\n';

    // Output: "0" (expected: "30a2")
    std::cout << std::hex << out << '\n';
}
#包括
#包括
int main()
{
//班次JIS中的片假名字母A(U+30A2)(代码页932)
// http://msdn.microsoft.com/en-us/goglobal/cc305152
字符常量cs[]=“\x83\x41”;
std::locale loc=std::locale(“日语”);
//输出:“日语_-Japan.932”(如预期)

std::cout我在VC2010/Windows7 64位中复制粘贴了您的代码

它的工作原理与您预期的一样。以下是输出:

Japanese_Japan.932
0
30a2

这可能是VC2012引入的一个bug…

我向微软内部报告了它。现在,微软已经将它作为一个新bug(DevDiv#737880)进行了填充。但我建议您在以下位置填写一个连接项:

I repo。要调试的代码非常难看,请报告此connect.microsoft.com谢谢!实际上,我没有直接受到此错误的影响,我是在尝试为相关(第三方库)创建一个最小示例时发现它的bug。但我想我会花点时间提交一个connect bug。不幸的是,我似乎无法提交bug:我陷入了一个循环,反复要求我完成所需的配置文件信息:connect.microsoft.com“完成所需的配置文件信息”--(下一步)--->social.microsoft.com“编辑我的配置文件”--(保存)-->profile.microsoft.com“注册”--(下一步)-->(返回开始)。当然,我已经填写了所有必填(*)字段。