C++ 如何从CP866字节中获取字符串

C++ 如何从CP866字节中获取字符串,c++,encoding,character-encoding,C++,Encoding,Character Encoding,我的程序从文件中读取字节并尝试将其转换为字符串。文件头是CP866中的文本 iconv_t cd = iconv_open("UTF-8","CP866"); char* iconv_in = bytes.data(); //Bytes is a char vector char* iconv_out = (char *)malloc(counter * sizeof(char)); //counter is a length of bytes array (char v

我的程序从文件中读取字节并尝试将其转换为字符串。文件头是CP866中的文本

    iconv_t cd = iconv_open("UTF-8","CP866");
    char* iconv_in = bytes.data(); //Bytes is a char vector
    char* iconv_out = (char *)malloc(counter * sizeof(char)); //counter is a length of bytes array (char vector)
    size_t iconv_in_bytes =counter;
    size_t iconv_out_bytes = counter;

    size_t ret = iconv(cd, &iconv_in, &iconv_in_bytes, &iconv_out, &iconv_out_bytes);

    if ((size_t) -1 == ret) {
            cout << "Error convert";
            return NULL;
    }
iconv_t cd=iconv_打开(“UTF-8”、“CP866”);
char*iconv_in=bytes.data()//字节是字符向量
char*iconv_out=(char*)malloc(计数器*sizeof(char))//计数器是字节长度数组(字符向量)
以字节为单位的大小=计数器;
大小=计数器;
大小\u t ret=iconv(cd、iconv\u输入、iconv\u输入字节、iconv\u输出、iconv\u输出字节);
如果((尺寸t)-1==ret){

CUT当代码> ICOV返回<代码> -1 你需要检查<代码> ErnOn/Cuth>看看哪里出了问题。很可能在输出缓冲区中没有足够的空间,而<>代码> ErnOn/Cuff>将等于<代码> E2Bug 。在不相关的注释中,不要在C++代码中使用<代码> MalOC ,使用<代码>新[]
。或者更好地使用
std::string
(或者
std::vector
)当<代码> ICOV返回<代码> -1 时,需要检查<代码> ErnOn/Cuth>以查看输出错误,在输出缓冲区中没有足够的空间,并且<代码> ErnOn/Cuff>将等于<代码> E2Gub。在不相关的注释中,请不要在C++代码中使用<代码> MalOC ,使用<代码>新[]。或者更好地使用
std::string
(或者
std::vector
)。