在进行页面浏览的时候,能够看到地址栏中的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++写的。