zoukankan      html  css  js  c++  java
  • 宽字符UTF-8转窄字符ANSI(使用tinyxml2乱码问题)

    使用tinyxml2读取UTF-8编码的XML时,中文乱码,tiny没有类似于QString::tostdwstring的方法,需要几己转换一下。

    对网上搜索的结果不甚满意,自己重写了一个方法。

    std::string UTF8ToGBK( const char *iUTF8 )
    {
    //宽字符长度
    int wclen = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)iUTF8, -1, NULL, 0);
    wchar_t *wszGBK = new wchar_t[wclen+1];
    memset(wszGBK, 0, wclen+1);
    MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)iUTF8, -1, (LPWSTR)wszGBK, wclen);

    //窄字符长度
    int clen = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
    char *szGBK = new char[clen+1];
    memset(szGBK, 0, clen + 1);
    WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, szGBK, clen, NULL, NULL);

    std::string strTransf=szGBK;
    delete []szGBK;
    delete []wszGBK;

    return strTransf;
    }

    用到了memset(buffer, 0, sizeof(buffer)),它用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为0。例:char a[100];memset(a, 0, sizeof(a));

    另外,对于const char*与char*之间的转换,

    1.const char*不能直接赋值到char*,理由:假如可以的话,那么通过char*就可以修改const char*指向的内容,这是不允许的。所以char*要另外开辟新的空间。

     const char* cpc="abc";
     char* pc=new char[100];
     strcpy(pc,cpc);

    2.char*到 const char*直接赋值即可

    char* pc="abcde";const char* cp=pcc;

  • 相关阅读:
    做过的笔试题
    (转)32位机器中int的字长
    JS_void()
    JS_增加事件,移除事件,动态元素的增删事件研究
    JS_animate 站在别人的肩膀上
    JS_对象的方法
    JS_Class.extend
    JS_返回值
    JS_eventBind
    JS_应用对象的复制
  • 原文地址:https://www.cnblogs.com/originalcandy/p/13992440.html
Copyright © 2011-2022 走看看