关于iconv参数的一个问题。
如下代码可以成功将GB2312转换为UTF-8:
#include <iostream>
#include <iconv.h>
#include <string.h>
#include <stdio.h>
using namespace std;
int main() {
cout<<"Hello World!"<<endl;
char gb2312[5] = {0xB0, 0xA1, 0xB0, 0xA1, '\0'};
cout << "GB2312: " << gb2312 << endl;
iconv_t cd;
cd = iconv_open("UTF-8", "GB2312");
cout << "cd: " << cd << endl;
char utf8[20];
size_t in = 5;
size_t out = 20;
//now we make char**,why?
char* GB2312 = gb2312;
char* UTF8 = utf8;
size_t convNum = iconv(cd, &GB2312, &in, &UTF8, &out);
perror("call iconv:");
iconv_close(cd);
cout << "in: " << in << endl;
cout << "out: " << out << endl;
cout << "convNum: " << convNum << endl;
cout << "UTF-8: " << utf8 << endl;
cout << "length: " << strlen(UTF8) << endl;
return 0;
}
但是如果这样调用iconv的话就会出现Segmentation fault,请问这是为什么?
size_t convNum = iconv(cd, (char**)&gb2312, &in, (char**)&utf8, &out);
[解决办法]
哦
我以为你只有一个utf8呢
原来你段错误的时候 换成小写的utf8了
[解决办法]
接分了