• 编码转换


    大家说torsion工具中文输入很麻烦,这段时间不忙,刚好静下心来,研究了下,只要把字符串转化从GB2312为UTF-8就可以了。
    
    主要修改static int Sc_ScanString(int ret)这个函数就ok了
    
    static int Sc_ScanString(int ret)
    {
       CMDtext[CMDleng - 1] = 0;
       if(!collapseEscape(CMDtext+1))
          return -1;
    
      /*
       CMDlval.str = (char *) consoleAlloc(dStrlen(CMDtext));
       dStrcpy(CMDlval.str, CMDtext + 1);
      */
      
       int n = dStrlen(CMDtext);
    
       char tempStr[102400];
       dStrcpy(tempStr, CMDtext + 1);
       convertGB2312toUTF8(tempStr, tempStr, 102400);
    
       int count = dStrlen(tempStr);
    
       if(n > count)
       {
        count = n;
        count++;
        CMDlval.str = (char *) consoleAlloc(count);
        dStrcpy(CMDlval.str, tempStr);
       }
       else
       {
        count++;
        CMDlval.str = (char *) consoleAlloc(count);
        dStrcpy(CMDlval.str, CMDtext + 1);
        convertGB2312toUTF8(CMDlval.str, CMDlval.str, count);
       }
    
       return(ret);
    
    }
    
     
    
    不过要自己先写字符转换函数
    
    void convertUTF8toGB2312(const char *unistring, char *outbuffer, int len)
    {
     wchar_t *buf = new wchar_t[len];
     MultiByteToWideChar(CP_UTF8, 0, unistring, -1, buf, len);
     WideCharToMultiByte(CP_ACP, 0, buf, -1, outbuffer, len, NULL, NULL);
    
     delete []buf;
    }
    
    void convertGB2312toUTF8(const char *unistring, char *outbuffer, int len)
    {
     wchar_t *buf = new wchar_t[len ];
     MultiByteToWideChar(CP_ACP, 0, unistring, -1, buf, len);
     WideCharToMultiByte(CP_UTF8, 0, buf, -1, outbuffer, len, NULL, NULL);
    
     delete []buf;
    }
    
     
    
    WCHAR  *UTF8ToUnicode(const char *str) 
     {
      int i = MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,str,-1,NULL,0);        
      WCHAR   *strUnicode=new   WCHAR[i];        
      MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,str,-1,strUnicode,i);
      return strUnicode;
      delete []strUnicode;
     }
    
     
    
    char *UnicodeToUTF8(const WCHAR* pText) 
     {
      int i= WideCharToMultiByte(CP_UTF8,0,pText,-1,NULL,0,NULL,NULL); //输入缓冲区大小是宽字符数        
      char   *strUTF8   =   new   char[i];        
      WideCharToMultiByte(CP_UTF8,0,pText,-1,strUTF8,i,NULL,NULL);
      return strUTF8;
      delete []strUTF8;
     }
  • 相关阅读:
    你想了解数据库吗,进来瞧一瞧吧,详细的数据库解读
    MySQL8.0-INFORMATION_SCHEMA增强
    工作总结:涉及数据库、软件测试等内容
    MySQL高级-MySQL锁
    年轻就该多尝试,教你20小时Get一项新技能
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    MySQL数据库高级操作(图文详解)
    JAVA RMI helloworld入门
    JAVA8 十大新特性详解
    Java 8 Lambda表达式探险
  • 原文地址:https://www.cnblogs.com/ytjjyy/p/2732124.html
Copyright © 2020-2023  润新知