- 论坛徽章:
- 0
|
- #include <iostream>
- #include <bitset>
- #include <iconv.h>
- #include <string.h>
- #include <stdio.h>
- #include <error.h>
- using namespace std;
- bool generalIconv(const char *from, const char *to, std::string &input, std::string &output)
- {
- if (!from || !to)
- {
- cout << "from or to error" << endl;
- return false;
- }
- if (input.size() > 60)
- {
- return false;
- }
- iconv_t conveter = iconv_open(to, from);
- if ((iconv_t)-1 == conveter)
- {
- cout << "iconv_open fail: ";
- int err = errno;
- printf("%s\n", strerror(err));
- return false;
- }
- char inBuf[48] = {}; //一个汉字的编码最多不会超过4个字节
- size_t insize = input.size() < 48? input.size(): 48;
- strncpy(inBuf, input.c_str(), insize);
- inBuf[insize] = 0;
- char outBuf[128] = {};
- size_t outsize = 128;
- char *in = inBuf;
- char *out = outBuf;
- size_t rc = iconv(conveter, &in, &insize, &out, &outsize);
- if (-1 == rc)
- {
- cout << "iconv fail: ";
- int err = errno;
- printf("%s\n", strerror(err));
- return false;
- }
- output = std::string(outBuf);
- iconv_close(conveter);
- return true;
- }
- int main()
- {
- string input = "刚好12ab";
- string output;
- string tmp;
- cout << input << endl;
- if (!generalIconv("UTF-8", "UCS-2", input, output)) {
- cout << "first fail" << endl;
- return 1;
- }
- cout << input.size() << endl;
- cout << output.size() << endl;
- if (!generalIconv("UCS-2", "UTF-8", output, tmp)) {
- cout << "first fail" << endl;
- return 1;
- }
- cout << tmp << endl;
- cout << output.size() << endl;
- cout << tmp.size() << endl;
- return 0;
- }
复制代码 编译运行:
./a.out
刚好12ab
10
4
刚好
4
6
原来字符串中的字母和数字都不见了,请问这是什么原因呢?谢谢 |
|