编码转换

来源:互联网 发布:sql注入语句登录系统 编辑:程序博客网 时间:2024/04/30 19:41

大家说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;
 }

原创粉丝点击