#include <iostream>
#include <locale.h>
#include <iconv.h>
#include <cstring>
#include <cerrno>
#include <vector>
using namespace std;
std::string utf8_to_big5(const std::string &str) {
size_t srclen = str.size() + 1, tarlen = str.size() * 2 + 1;
iconv_t cd = iconv_open("BIG5", "UTF8");
std::vector<char> cstr(str.c_str(), str.c_str() + str.size() + 1);
cout<<cstr.size()<<endl;
char *src = cstr.data();
char big5buf[str.length() * 2 + 1];
char *dest = big5buf;
if (cd == (iconv_t)-1)
throw std::runtime_error("error opening iconv");
if (iconv(cd, &src, &srclen, &dest, &tarlen) == -1)
cout<<strerror(errno)<<endl;
iconv_close(cd);
for (int i = 0; i < strlen(big5buf); i++)
printf("%X\n",big5buf[i]);
return std::string(big5buf);
}
int main() {
setlocale(LC_ALL,"en_US.utf8");
char utf8buf[] = "好";
if((unsigned char)utf8buf[0] == 0xE5)
cout<<"yes";
cout<<hex
<<(int)utf8buf[1]<<endl
<<(int)utf8buf[2]<<endl
<<(int)utf8buf[3]<<endl;
cout<<strlen(utf8buf)<<endl;
//setlocale(LC_ALL,"zh_TW.BIG5");
cout<<utf8_to_big5("好");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bG9jYWxlLmg+CiNpbmNsdWRlIDxpY29udi5oPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNlcnJubz4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCglzdGQ6OnN0cmluZyB1dGY4X3RvX2JpZzUoY29uc3Qgc3RkOjpzdHJpbmcgJnN0cikgewoJCXNpemVfdCBzcmNsZW4gPSBzdHIuc2l6ZSgpICsgMSwgdGFybGVuID0gc3RyLnNpemUoKSAqIDIgKyAxOwoJCWljb252X3QgY2QgPSBpY29udl9vcGVuKCJCSUc1IiwgIlVURjgiKTsKCgkJc3RkOjp2ZWN0b3I8Y2hhcj4gY3N0cihzdHIuY19zdHIoKSwgc3RyLmNfc3RyKCkgKyBzdHIuc2l6ZSgpICsgMSk7CgkJY291dDw8Y3N0ci5zaXplKCk8PGVuZGw7CgkJY2hhciAqc3JjID0gY3N0ci5kYXRhKCk7CgkJY2hhciBiaWc1YnVmW3N0ci5sZW5ndGgoKSAqIDIgKyAxXTsKCQljaGFyICpkZXN0ID0gYmlnNWJ1ZjsKCgkJaWYgKGNkID09IChpY29udl90KS0xKQoJCQl0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoImVycm9yIG9wZW5pbmcgaWNvbnYiKTsKCgkJaWYgKGljb252KGNkLCAmc3JjLCAmc3JjbGVuLCAmZGVzdCwgJnRhcmxlbikgPT0gLTEpCgkJCWNvdXQ8PHN0cmVycm9yKGVycm5vKTw8ZW5kbDsKCgkJaWNvbnZfY2xvc2UoY2QpOwoJCQoJCWZvciAoaW50IGkgPSAwOyBpIDwgc3RybGVuKGJpZzVidWYpOyBpKyspCgkJcHJpbnRmKCIlWFxuIixiaWc1YnVmW2ldKTsKCgkJcmV0dXJuIHN0ZDo6c3RyaW5nKGJpZzVidWYpOwoJfQoKaW50IG1haW4oKSB7CglzZXRsb2NhbGUoTENfQUxMLCJlbl9VUy51dGY4Iik7CmNoYXIgdXRmOGJ1ZltdID0gIuWlvSI7CmlmKCh1bnNpZ25lZCBjaGFyKXV0ZjhidWZbMF0gPT0gMHhFNSkKY291dDw8InllcyI7CmNvdXQ8PGhleAoKPDwoaW50KXV0ZjhidWZbMV08PGVuZGwKPDwoaW50KXV0ZjhidWZbMl08PGVuZGwKPDwoaW50KXV0ZjhidWZbM108PGVuZGw7CiAgICAgICAgY291dDw8c3RybGVuKHV0ZjhidWYpPDxlbmRsOwoJLy9zZXRsb2NhbGUoTENfQUxMLCJ6aF9UVy5CSUc1Iik7Cgljb3V0PDx1dGY4X3RvX2JpZzUoIuWlvSIpOwoJcmV0dXJuIDA7Cn0=