我正在尝试用#include <iconv.h>
转换字符à,但是我收到了垃圾。''。
这是代码
#include <stdio.h>
#include <string.h>
#include <iconv.h>
#include <iostream>
int main()
{
char *gbk_str = "àèì asdsa sd aä";
char dest_str[100];
char *out = dest_str;
size_t inbytes = strlen(gbk_str);
size_t outbytes = sizeof dest_str;
iconv_t conv = iconv_open("ISO8859-1", "UTF-8");
if (conv == (iconv_t)-1) {
std::cout <<"iconv_open";
return 1;
}
if (iconv(conv, &gbk_str, &inbytes, &out, &outbytes) == (size_t)-1) {
std::cout << "iconv";
return 1;
}
dest_str[sizeof dest_str - outbytes] = 0;
puts(dest_str);
return 0;
}
再来:
意大利语字符:POLS 6000 Impianto riduzione d。速度
字节编码:50 4f 4c 53 20 36 30 30 30 20 49 6d 70 69 61 6e 74 6f 20 72 69 64 75 7a 69 6f 6e 65 20 64 2e 20 76 65 6c 6f 63 69 74 c3 a0
已转换:POLS 6000 Impianto riduzione d。速度-> POLS 6000 Impianto riduzione d。 velocit340
答案 0 :(得分:0)
您必须将终端字符编码设置为ISO8859-1。在我的Linux的Mate Terminal中,它是:
终端>>设置字符编码>>中欧(WINDOWS-1250)
然后,我能够从您的程序中看到正确的输出。没有此更改,的确是垃圾。