开发者社区> 问答> 正文

MFC Uniocd编码转GB2312编码问题:报错

在MFC中用ReadString函数读取了网页源码,然后显示出来读取的是乱码,MFC采用的是Unicode编码,网页是GB2312编码,如何将Unicode CString 转换成 GB2312 CString?谢谢!

展开
收起
kun坤 2020-06-06 15:50:48 493 0
1 条回答
写回答
取消 提交回答
  • #include<iostream>  
    using namespace std;  
      
    char dec2hexChar(short int n) {  
     if ( 0 <= n && n <= 9 ) {  
      return char( short('0') + n );  
     } else if ( 10 <= n && n <= 15 ) {  
      return char( short('A') + n - 10 );  
     } else {  
      return char(0);  
     }  
    }  
      
    short int hexChar2dec(char c) {  
     if ( '0'<=c && c<='9' ) {  
      return short(c-'0');  
     } else if ( 'a'<=c && c<='f' ) {  
      return ( short(c-'a') + 10 );  
     } else if ( 'A'<=c && c<='F' ) {  
      return ( short(c-'A') + 10 );  
     } else {  
      return -1;  
     }  
    }  
      
    string escapeURL(const string &URL)  
    {  
     string result = "";  
     for ( unsigned int i=0; i<URL.size(); i++ ) {  
      char c = URL[i];  
      if (  
       ( '0'<=c && c<='9' ) ||  
       ( 'a'<=c && c<='z' ) ||  
       ( 'A'<=c && c<='Z' ) ||  
       c=='/' || c=='.'  
       ) {  
       result += c;  
      } else {  
       int j = (short int)c;  
       if ( j < 0 ) {  
        j += 256;  
       }  
       int i1, i0;  
       i1 = j / 16;  
       i0 = j - i1*16;  
       result += '%';  
       result += dec2hexChar(i1);  
       result += dec2hexChar(i0);  
      }  
     }  
     return result;  
    }  
      
    string deescapeURL(const string &URL) {  
     string result = "";  
     for ( unsigned int i=0; i<URL.size(); i++ ) {  
      char c = URL[i];  
      if ( c != '%' ) {  
       result += c;  
      } else {  
       char c1 = URL[++i];  
       char c0 = URL[++i];  
       int num = 0;  
       num += hexChar2dec(c1) * 16 + hexChar2dec(c0);  
       result += char(num);  
      }  
     }  
     return result;  
    }  
      
    int main()  
    {  
        string str = "你好";  
        cout<<str<<endl;
        string temp = escapeURL(str);   
        cout<<temp<<endl;
        cout<<deescapeURL(temp)<<endl;   
        return 0;  
    }
    2020-06-06 15:50:53
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载