现在的位置: 首页 > 综合 > 正文

把页面搜索URL中的UTF-8编码还原为汉字

2012年09月24日 ⁄ 综合 ⁄ 共 1378字 ⁄ 字号 评论关闭

 在进行页面浏览的时候,能够看到地址栏中的URL很少有显示中文字符的,全是符号和英文字母,这在一定程度上说明了为什么中国的软件不发达鄙视(为了与国外接轨,就需要涉及到字符转换,这是一个很头疼的问题,很多时间往往就花在字符格式转换上面了,杯具抓狂)。

 

如今在做一个字符转换的小程序,将HTTP请求中的编码还原为汉字,对此不熟悉的可以看看这篇文章,这里分析的很到位。在CSDN上面搜索了老半天,只找到将UTF8转换为汉字的,而没有GB2312转换为汉字的,搞的人很郁闷,不知道GB2312能不能转换,头疼发火

 

其中UTF8转换程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
using namespace std;


int main()
{
  //  char s[] = "%E4%B8%AD%E5%9B%BD%E9%93%B6%E8%A1%8C%E6%AD%A6%E6%B1%89%E5%B8%82%E9%87%91%E8%9E%8D%E6%B8%AF%E9%93%B6%E8%A1%8C";
 
	char s[]="%E6%B1%89%E5%AD%97%E7%BC%96%E7%A0%81";
    int len = strlen(s);
    char* temps = new char[len+1];
    temps[len] = '\0';
	
    int temps_pos = 0;
	int i;
	
    //去掉%号
    for ( i = 0;i<len;++i)
    {
        if (s[i] != '%')
        {
            temps[temps_pos] = s[i];
            temps_pos++;
        }
    }
    temps[temps_pos] = '\0';
    cout<<temps<<endl;
	
    int temps_len = strlen(temps);
	
    int UTF8len = temps_len/2;
    char* UTF8str = new char[UTF8len+1];
	
    UTF8str[UTF8len] = '\0';
    //把字符转换成数字,得到真实的UTF8串
    for ( i = 0;i<UTF8len*2;)
    {
        char convert[3] = {0};
        convert[0] = temps[i++];
        convert[1] = temps[i++];
        char *end;
        int tempint = strtol(convert,&end,16);
        UTF8str[i/2-1] = tempint;
    }
	
    //UTF8转换到UTF16
    int wcslen = ::MultiByteToWideChar(CP_UTF8,NULL,UTF8str,UTF8len,NULL,0);
	
    wchar_t* wszString = new wchar_t[wcslen + 1];
	
    ::MultiByteToWideChar(CP_UTF8,NULL,UTF8str ,UTF8len,wszString,wcslen);
	
    wszString[wcslen] = L'\0';
	
    //设置区域
    std::wcout.imbue(std::locale("CHS"));
    wcout<<wszString<<endl;
	
    delete []temps;
    delete []UTF8str;
    delete []wszString;

	return 0;
}



 

什么时候有个GB2312转换为汉字的程序出现就好了,前提是用C/C++写的。

 

抱歉!评论已关闭.