目前,大陆地区常见的中文编码有以下三种。
GB2312
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。在windows中的代码页是CP936。
GBK
GBK最初是由微软对GB2312的扩展,也就是CP936字码表 (Code Page 936)的扩展。最初出现于Windows 95简体中文版中,由于Windows产品的流行和在大陆广泛被使用,中华人民共和国国家有关部门将其作为技术规范。注意GBK并非国家正式标准,只是国家技术监督局标准化司、电子工业部科技与质量监督司发布的“技术规范指导性文件”。GBK字集是简繁字集,包括了GB字集、BIG5字集和一些符号,共包括21003个字符。
GBK作为对GB2312的扩展,在现在的windows系统中仍然使用代码页CP936表示,但是同样的936的代码页跟一开始的936的代码页只支持GB2312编码不同,现在的936代码页支持GBK的编码,GBK同时也向下兼容GB2312编码。
GB18030
2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。 GB18030在windows中的代码页是CP54936。

1.简体中文和繁体中文的转换

内码一般是指缺省代码页指定的编码,缺省代码页是默认用来解释字符的编码。简体中文windows系统缺省代码页是GBK。
ANSI编码:即所有在ASCII基础上扩充的字符编码的统称。在英文操作系统中ANSI是ASCII编码,繁体中文系统中ANSI是Big5编码,日文系统中ANSI是Shift_JIS编码,简体中文系统有点特殊,比如:editplus或记事本的默认编码为ANSI,但具体ANSI代表的是gbk还是gb2312还是gb18030,由这些编辑器根据码流去识别。window下很多文本编辑器都没有强行采用某种特定的编码,统一使用系统编码,所以中文win系统中ANSI就是GBK。

GBK字符集包括了简体字符集、繁体字符集以及一些中文符号,当然同一汉字简繁字体在GBK下对应两种不同编码方式。可以,在ANSI编码下的简繁转化实质是在GBK编码表内的映射转化。
window头文件中提供了LCMapString function可以实现映射功能,程序如下

/**作者:侯凯*说明:中文简繁的相互转化*日期:2013-6-18*/
#include <Windows.h>
#include <iostream>
using namespace std;//中国->中國
char* Simple2Tra(char* szBuf)
{ if(!strcmp(szBuf, ""))return NULL;int nReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, szBuf, -1, NULL, 0);char *pcBuf = new char[nReturn];LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, szBuf, -1, pcBuf, nReturn);return pcBuf;
}//中國->中国
char* Tra2Simple(char* szBuf)
{ if(!strcmp(szBuf, ""))return NULL;int nReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_SIMPLIFIED_CHINESE, szBuf, -1, NULL, 0);char *pcBuf = new char[nReturn];LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_SIMPLIFIED_CHINESE, szBuf, nReturn, pcBuf, nReturn);return pcBuf;
}void main()
{char* simWord = "中国";char* traWord = Simple2Tra(simWord);cout << simWord << "->" << traWord << endl;char* simWord2 = Tra2Simple(traWord);cout << traWord << "->" << simWord2 << endl;
}

LCMAP_SIMPLIFIED_CHINESE表示traditional Chinese字符集到simplified Chinese字符集的映射,LCMAP_TRADITIONAL_CHINESE相反。函数参数可参见msdn。

2.简体中文和繁体中文(Big5)的转换

大多数情况下简繁的转化是GBK字符集内部的相互映射,但是有时我们会碰到另一种常见的繁体编码:“大五码”。Big5码是一套双字节字符集,BIG5码是通行于台湾、香港地区的一个繁体字编码方案,其对应代码页为950。首先来看繁体Big5与繁体GBK编码的相互转化,它们二者通过Unicode字符集相关联,Big5<—>Unicode<—>GBK,类似思想可参见此文,程序实现如下

//中國->い瓣
//繁体GBK转Big5码
char* GBK2BIG5(char* szBuf)
{ int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szBuf, -1, NULL, 0);  wchar_t* wszString = new wchar_t[wcsLen];::MultiByteToWideChar(CP_ACP, NULL, szBuf, -1, wszString, wcsLen); //CP_ACP本地编码(GBK)对应代码页int ansiLen = ::WideCharToMultiByte(950, NULL, wszString, -1, NULL, 0, NULL, NULL);char* szAnsi = new char[ansiLen];  ::WideCharToMultiByte(950, NULL, wszString, -1, szAnsi, ansiLen, NULL, NULL); //Big5对应代码页
    delete[] wszString;return szAnsi;
}//い瓣->中國
//Big5码转繁体GBK
char* BIG52GBK(char* szBuf)
{ int wcsLen = ::MultiByteToWideChar(950, NULL, szBuf, -1, NULL, 0);  wchar_t* wszString = new wchar_t[wcsLen];::MultiByteToWideChar(950, NULL, szBuf, -1, wszString, wcsLen); //Big5对应代码页int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, -1, NULL, 0, NULL, NULL);char* szAnsi = new char[ansiLen];  ::WideCharToMultiByte(CP_ACP, NULL, wszString, -1, szAnsi, ansiLen, NULL, NULL); //CP_ACP本地编码(GBK)对应代码页
    delete[] wszString;return szAnsi;
}

上述程序实现了繁体字下GBK和Big5码的相互转化,由于简体中文操作系统中ANSI默认是GBK编码,“中國”二字转码为Big5码后,系统仍然按照GBK编码进行解析后显示,这样势必是乱码的。如果想要得到Big5编码下的正确显示,可以更改系统的语言,将Big5作为其默认ANSI即可,如下:打开“控制面板”->“区域和语言”

重启计算机,台湾地区系统默认使用Big5码。如果刚才把GBK->Big5的结果保存到txt中,这时会发现txt文档中保存的“い瓣”变成了“中國”。在Big5编码下,有些大陆的网页可能会显示乱码,建议再改回原来的设置。
上述实现了繁体字GBK和Big5码的转化。如果想要将简体中文转化到Big5码,可以通过“简体中文GBK->繁体中文GBK->繁体Big5 ”的方式实现,第一步是GBK码内的映射,第二步是两种编码间的转化;反之亦然。

简体中文和繁体中文的转换相关推荐

  1. 关于在ASP 中简体中文和繁体中文的转换 的函数

    var Default_isFT = 0  //默认是否繁体,0-简体,1-繁体 var StranIt_Delay = 50 //翻译延时毫秒(设这个的目的是让网页先流畅的显现出来) //----- ...

  2. opencc解决简体中文与繁体中文转换问题【python】

    1.Opencc-python 今天学习文本分析中偶然想到繁体中文要如何分割的问题,于是联想到将繁体中文先转换为简体中文,查过网上的资料后发现比较好用的是opencc-python,以及下载zh_wi ...

  3. 简体中文与繁体中文之间的转换

    刚开发玩的一个项目要将简体中文转换为繁体中文并生成txt文档传送到服务器,但是之前一直没接触过,这次算是费尽周折总算搞定! 今天把这个总结一下保存下来方便以后的查询,也方便大家共同进步 首相是将简体中 ...

  4. 简体中文与繁体中文互转

     一. BIG5编码, GB编码(GB2312, GBK, ...), Unicode编码, UTF编码 1.1. BIG5编码 BIG5字集是台湾繁体字集,共包括国标繁体汉字13053个 1.2 ...

  5. java获取系统语言(区分简体中文和繁体中文)

    2019独角兽企业重金招聘Python工程师标准>>> 之前做android应用时遇到过一个问题,就是根据语言的不同而显示不同的内容 网上很多代码都是错误的,起码无法区分简体和繁体, ...

  6. 简体中文转换为繁体中文

    <? /***********************************************************************                       ...

  7. php 简转繁体,PHP_简体中文转换为繁体中文的PHP函数,感谢网友Keyes提供移植用的Delph - phpStudy...

    简体中文转换为繁体中文的PHP函数 感谢网友Keyes提供移植用的Delphi源代码.其调用方式为$txt=gbtobig5($txt). (注:源代码中的include "data_gb. ...

  8. java判断简体和繁体字_java获取系统语言(区分简体中文和繁体中文) | 学步园...

    之前做android应用时遇到过一个问题,就是根据语言的不同而显示不同的内容 网上很多代码都是错误的,起码无法区分简体和繁体,这里给出一种方法 不涉及android任何知识,所以就归类到java这边了 ...

  9. Camunda Modeler汉化添加简体中文和繁体中文支持

    Camunda Modeler官方是只支持英文的,通过多语言插件是可以实现多语言支持的,方法如下: 1.首先Camunda Modeler的安装目录,camunda-modeler-4.12.0-wi ...

  10. java 取系统语言_java获取系统语言(区分简体中文和繁体中文) .

    之前做android应用时遇到过一个问题,就是根据语言的不同而显示不同的内容 网上很多代码都是错误的,起码无法区分简体和繁体,这里给出一种方法 不涉及android任何知识,所以就归类到java这边了 ...

最新文章

  1. 建立计算机系学生视图,实验六 视图的操作.doc
  2. 色诱社报道:昨日,腾讯公司公布了2009年发展策划
  3. matlab怎么设置x轴距,MATLAB及其在电气工程中的应用苏小林第四章.ppt
  4. SonarQube 代码扫描任务集成
  5. 抵扣个税3K+,这个考试,70%程序员都报了!
  6. saltstack 实验(小弟不才)
  7. Intelligence System HDU - 3072(强连通分量)
  8. 日记1-时间序列协整进步
  9. ym——Android从零开始(27)(山寨版微信-下)(新)
  10. Java基础:java线程状态
  11. STM32CubeMX工程提示未定义变量LL_APB1_GRP1_PERIPH_BKP
  12. 支付宝APP支付扫码支付
  13. grasps元素_无摩擦力是什么意思
  14. 程序员面试前只因为做了这几件事,成功征服了一系列大厂面试官。
  15. 青龙面板教程(五):代理设置
  16. w10计算机运行特别卡,win10会很卡,详细教您怎么解决
  17. word中公式编辑器的快捷键
  18. 位运算符详解(与,或,非,异或)
  19. linux被已安装软件标记为废除,dpkg --get-selections
  20. DLNA介绍(包括UPnP,2011/6/20 更新)

热门文章

  1. TestBench 基本写法与框架
  2. Spring学习Ioc
  3. 2021-2027全球与中国编码器附件市场现状及未来发展趋势
  4. [4G5G专题-106]:部署 - LTE无线网络规划与设计概览
  5. JConsole可视化工具介绍
  6. android封装全局调用的toast_安卓全局toast
  7. 物联网安全 - 对称加密算法
  8. PowerDesigner 下载地址
  9. 游戏是怎么赚钱的 - 科普篇
  10. 武汉大学计算机学院夏桂松,武汉大学电子信息学院导师介绍:何楚