简体中文与繁体中文互转
来源:互联网 发布:最垃圾的父母 知乎 编辑:程序博客网 时间:2024/06/06 05:37
一. BIG5编码, GB编码(GB2312, GBK, ...), Unicode编码, UTF编码
1.1. BIG5编码
BIG5字集是台湾繁体字集,共包括国标繁体汉字13053个
1.2. GB编码
GB2312字集是简体字集, 全称为GB2312(80)字集, 共包括国标简体汉字6763个;
GB2312是中国规定的汉字编码, 也可以说是简体中文的字符集编码;
GBK包含全部中文字符;
GBK字集是简繁字集, 包括了GB的字集, BIG5的字集和一些符号, 共包括21003个字符;
GBK是GB2312的扩展, 除了兼容GB2312外, 它还能显示繁体中文, 还有日文的假名;
GBK标准, 他兼容GB2312标准, 同时在GB2312标准的基础上扩展了GB13000包含的字;
注意:
1. GBK字集是简繁字集, 包括了GB字集, BIG5字集和一些符号; 例如BIG5编码能够表示XX汉字, GBK编码也能够表示XX汉字, 但是XX汉字的BIG5编码与GBK编码是不同的.
2. GBK编码兼容GB2312编码, 例如GB2312编码能够表示YY汉字, 那么GBK编码也能够表示YY汉字, 而且YY汉字的GB2312编码与GBK编码是相同的.
3. 也就是说"包含"与"兼容"是两回事来的.
1.3. Unicode编码
Unicode也是一种字符编码方法, 由国际组织设计, 可以容纳全世界所有语言文字的编码方案. Unicode的学名是"UniversalMultiple-Octet Coded Character Set". 简称为UCS。UCS可以看作是"Unicode CharacterSet"的缩写.
1.4. UTF编码
UTF编码是对Unicode编码的存储(传输)规则(不是对文字的编码规则).
二. 简体中文与繁体中文
1. 简体中文是使用GB2312编码的; 台湾繁体中文使用BIG5编码; 而GBK编码既包含简体中文, 也包含了繁体中文;
2. 所以, 要表示简体中文, 你可以使用GB2312编码和GBK编码; 要表示繁体中文, 你可以使用BIG5编码和GBK编码;
3. 通常, 如果在简体中文操作系统中使用的繁体字, 选GBK码繁体中文; 如果在繁体中文操作系统使用繁体字, 选BIG5码繁体中文;
三. 繁简体中文的互转
我自己使用Window系统就是使用GBK编码简体中文系统.
例子: char* p = "你好, 中国";
1. 这里就是使用GBK编码简体部分(就是GB2312编码)(本地操作系统的编码);
2. 如果"你好, 中国"转换成繁体, 你需要使用GBK编码的繁体部分或者使用BIG5编码;
四. 整理一下思路
1. 简体中文可以用哪些编码实现: GBK编码简体部分, Unicode编码简体部分, GB2312编码;
2. 繁体中文可以用哪些编码实现: GBK编码繁体部分, Unicode编码繁体部分, BIG5编码;
3. 所以繁简中文互换有这些途径(GBK编码简体部分和GB2312编码可以认为是同一个东西):
a. GBK编码简体部分<->GBK编码繁体部分b. GBK编码简体部分<->Unicode编码繁体部分c. GBK编码简体部分<->BIG5编码d. Unicode编码简体部分<->GBK编码繁体部分e. Unicode编码简体部分<->Unicode编码繁体部分f. Unicode编码简体部分<->BIG5编码4. 其中编码实现时, "GBK编码<->BIG5编码"需要这样子(通过Unicode作为中间人): GBK编码<->Unicode编码<->BIG5编码, 所以有:
A. GBK编码简体部分<->GBK编码繁体部分变成: GBK编码简体部分<--LCMapStringA-->GBK编码繁体部分B. GBK编码简体部分<->Unicode编码繁体部分变成: GBK编码简体部分<--LCMapStringA-->GBK编码繁体部分<->Unicode编码繁体部分C. GBK编码简体部分<->BIG5编码变成: GBK编码简体部分<--LCMapStringA-->GBK编码繁体部分<->Unicode编码繁体部分<->BIG5编码D. Unicode编码简体部分<->GBK编码繁体部分变成: Unicode编码简体部分<->GBK编码简体部分<--LCMapStringA-->GBK编码繁体部分E. Unicode编码简体部分<->Unicode编码繁体部分变成: Unicode编码简体部分<->GBK编码简体部分<--LCMapStringA-->GBK编码繁体部分<->Unicode编码繁体部分F. Unicode编码简体部分<->BIG5编码变成: Unicode编码简体部分<->GBK编码简体部分<--LCMapStringA-->GBK编码繁体部分<->Unicode编码繁体部分<->BIG5编码
5. 简化一下: 因为GBK包含了简体中文和繁体中文, 所以只使用A. GBK编码简体部分<->GBK编码繁体部分,然后其他的编码方式, 喜欢怎么转就怎么转.
参考: http://blog.csdn.net/bagboy_taobao_com/article/details/8594466
五. 实现
// #define LCMAP_SIMPLIFIED_CHINESE 0x02000000 // map traditional chinese to simplified chinese// #define LCMAP_TRADITIONAL_CHINESE 0x04000000 // map simplified chinese to traditional chinesechar* TSTransform(const char* pStrSrc, int nToTS){LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);int nLength = LCMapStringA(lcid, nToTS, pStrSrc, -1, NULL, 0);char* pBuffer = new char[nLength + 1];memset(pBuffer, 0, nLength + 1);LCMapStringA(lcid, nToTS, pStrSrc, -1, pBuffer, nLength);// 繁体转简体return pBuffer;}// 繁体中文转换成简体中文(基于GBK编码)char* TraditionalToSimplified(const char* pStrTraditional){return TSTransform(pStrTraditional, LCMAP_SIMPLIFIED_CHINESE);}// 简体中文转换成繁体中文(基于GBK编码)char* SimplifiedToTraditional(const char* pStrSimplified){return TSTransform(pStrSimplified, LCMAP_TRADITIONAL_CHINESE);}int _tmain(int argc, _TCHAR* argv[]){std::string strGB2312 = "你好, 中国!";char* pS = SimplifiedToTraditional(strGB2312.c_str());char* pT = TraditionalToSimplified(pS);return 0;}
文档说明:
http://msdn.microsoft.com/en-us/library/cc233968.aspx
http://msdn.microsoft.com/en-us/library/dd318700(VS.85).aspx
另看:
编码了解: http://blog.csdn.net/bagboy_taobao_com/article/details/42294097
编码转换实现代码: http://blog.csdn.net/bagboy_taobao_com/article/details/8594466
- 简体中文与繁体中文互转
- 简体中文与繁体中文互换
- 在线简体中文转繁体中文[转]
- 简体中文与繁体中文的互相转换
- 简体中文与繁体中文的转换函数
- 简体中文与繁体中文的转换函数
- delphi 简体中文与繁体中文的转换函数
- Python 繁体中文与简体中文相互转换
- Python 繁体中文与简体中文相互转换
- 简体中文转换为繁体中文
- 简体中文转换繁体中文
- xoops模组开发手册(繁体中文转简体中文)
- 简体中文转换为繁体中文类
- 简体中文和繁体中文转换方法
- 快速区分简体中文和繁体中文
- 简体中文和繁体中文的转换
- PHP中繁体中文转换成简体中文
- 简体中文转换为繁体中文的PHP函数
- Linux和Windows端口常用操作
- 技术资源链接
- [人生感悟]在平凡中蜕变,我的2014
- 雪花效果前台
- ---------------生成1-100数字的方法(包括SQL SERVER和DB2)----------
- 简体中文与繁体中文互转
- Php编译安装步骤
- 乌班图安装
- ABAP 仓库库存-物料拆分的算法
- 好的设计
- quartz定时任务时间设置
- 大话软件工程
- 再见2014,你好2015
- 开源软件测评方法及工具