我正在与在Windows上运行的供应商合作,并希望使用UTF16格式的文本。我在Linux上运行它是UTF8。我正在尝试使用iconv从UTF8转换为UTF16,以便我可以通过套接字连接发送。我在这里发现了一篇文章stackOverflow,并试图遵循该代码,但我的函数没有返回任何内容。有没有人有从UTF-8转换为UTF-16的经验?感谢。
char * Convert( char *from_charset, char *to_charset, char *input )
{
size_t input_size, output_size, bytes_converted;
char * output;
char * tmp;
iconv_t cd;
cd = iconv_open( to_charset, from_charset);
if ( cd == (iconv_t) -1 )
{
//Something went wrong with iconv_open
if (errno == EINVAL)
{
char * buffer;
sprintf(buffer, "Conversion from %s to %s not available", from_charset, to_charset);
cout << buffer << endl;
}
return NULL;
}
input_size = strlen(input);
output_size = 2 * input_size;
output = (char*) malloc(output_size+1);
bytes_converted = iconv(cd, &input, &input_size, &output, &output_size);
cout << "Bytes converted: " << bytes_converted << endl;
if ( iconv_close (cd) != 0)
cout<< "Error closing iconv_error" << endl;
return output;
}
答案 0 :(得分:0)
iconv函数获取指向字符串的指针的地址,并将其转换为指向char数组的下一个元素。当它完成输出实际上指向数组的最后一个元素时,它可以是null或其他东西。 您需要将输出字符串的起始地址保存在临时位置。 在将输出馈送到iconv之前,请执行以下操作 char * tempoutput = output;
然后在iconv调用后返回tempoutput;
并且不要忘记释放(输出) 并且返回的字符串也是presistent你需要在使用convert后释放它。