当前位置:   article > 正文

GB2312、GBK、UTF-8 如何转换_c# 4.0框架 utf8 和 gbk,gb2312 字符集 互相转换

c# 4.0框架 utf8 和 gbk,gb2312 字符集 互相转换

【什么是编码】

首先,我们要明白,GB2312、GBK和UTF-8都是一种字符编码。除此之外,还有好多字符编码。只是对于我们中国人的网站来说,用这三种编码比较多。

简单的说一下,为什么要用编码?在计算机内,储存文本信息用ASC II码,每一个字符对应着唯一的ASCII码。最初计算机是由美国发明的,他们也用的是键盘和上面的字母,所以他们的字符ASCII好解决。但是我们中国 的就不同了,每个汉字要对应唯一的ASCII码。这样,就出来了国家制定的字符编码标准:GB2312、GBK等。其他国家,其他语言也有他们对应的编码 标准。

GB 就是国标的意思,GB2312和GBK主要用于汉字的编码,而UTF-8是全世界通用的。意思就是说,如果你的网页主要面对使用汉语的中国人的话,使用 GB2312 和 GBK 非常好,文字储存体积要小,有一些优点。如果你的网页要面向世界的话,你再用GB2312 和 GBK 作为网页编码,有些电脑上的浏览器没有这种编码,你的网页汉字内容就会变成无法识别的乱码。

 

【延伸阅读】

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换(GBK、GB2312 -- Unicode -- UTF8 )

使用UTF-8的一个好处:其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。

  • gb2312 是简体中文的码 
  • gbk 支持简体中文及繁体中文 
  • big5 支持繁体中文 
  • utf-8 支持几乎所有字符 

中国大陆最常用的就是GBK18030编码,除此之外还有GBK,GB2312,这几个编码的关系是这样的。 最早制定的汉字编码是GB2312,包括6763个汉字和682个其它符号 95年重新修订了编码,命名GBK1.0,共收录了21886个符号。 之后又推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字,现在WINDOWS平台必需要支持GBK18030编码。

 

【编码转换】

通常,服务端与客户端之间进行数据传输,涉及到中文,往往都会涉及到编码的转换。服务端在遇到中文时,都会转换为UTF-8格式。而客户端接收到服务端数据时,一般会把该数据的中文字符转为GBK(GB2312)才能正常显示。

  1. //utf8_to_gb2312
  2. string utf8_to_gb2312(const char* utf8)
  3. {
  4. int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
  5. wchar_t* wstr = new wchar_t[len + 1];
  6. memset(wstr, 0, len + 1);
  7. MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
  8. len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
  9. char* str = new char[len + 1];
  10. memset(str, 0, len + 1);
  11. WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
  12. string strTemp = str;
  13. if (wstr)
  14. delete[] wstr;
  15. if (str)
  16. delete[] str;
  17. return strTemp;
  18. }
  19. //gb2312_to_utf8
  20. string gb2312_to_utf8(const char* gb2312)
  21. {
  22. int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
  23. wchar_t* wstr = new wchar_t[len + 1];
  24. memset(wstr, 0, len + 1);
  25. MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
  26. len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
  27. char* str = new char[len + 1];
  28. memset(str, 0, len + 1);
  29. WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
  30. string strTemp = str;
  31. if (wstr)
  32. delete[] wstr;
  33. if (str)
  34. delete[] str;
  35. return strTemp;
  36. }

 

ValueDescription
CP_ACPANSI code page
CP_MACCPNot supported
CP_OEMCPOEM code page
CP_SYMBOLNot supported
CP_THREAD_ACPNot supported
CP_UTF7UTF-7 code page
CP_UTF8UTF-8 code page

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/253440
推荐阅读
相关标签
  

闽ICP备14008679号