编程基础篇 文字编码unicode ansi等,包括utf-8等转换

来源:互联网 发布:啊哈算法电子版下载 编辑:程序博客网 时间:2024/06/18 14:33

一开始编程时,对于这些编码格式和相互转换一点不了解,后来有时间就学习了一下,总结下来,希望大家能指点指点。

字符编码方式

早期是ANSI多字节边编码,ASCII码(0x00~0x7f),一个字节表示。
针对中文,中国大陆先后出了GB2312(两字节),GBK(两字节),GB18030(两字节或四字节),港澳台则使用大五码 Big5
国际组织制定了Unicode编码,也成万国码,国际码

Unicode编码系统分为编码方式和实现方式
编码方式为UCS-2(两字节),UCS-4(四字节)

实现方式或者转换格式为

UTF-8:灵活的变长编码,对于 ASCII 使用一个字节编码,其他本地化语言文字用多个字节编码,最长可以到 6 个字节编码一个字符。对于汉字,通常是 3 个字节表示一个汉字。这是 Unix/Linux 系统默认的字符编码

UTF-16:兼容 UCS-2,一般都是两字节表示一个字符,对于超出两字节的国际码字符,使用一对两字节来表示。在存储时,按两个字节的排布顺 序,可以分为 UTF-16LE(Little Endian,小端字节序)和UTF-16BE(Big Endian,大端字节序),微软所说的 Unicode 默认就是 UTF-16LE。

UTF-32:同 UCS-4,因为用四个字节表示一个字符,所以不需要考虑扩展了。这种编码方式简单,但也特别浪费空间,所以应用很少。在存储时也分为 UTF-32BE 和 UTF-32LE,因为用得少,所以不用太关心这种编码格式。


主要是关注utf-8和unicode的关系

Unicode符号范围         |   UTF-8编码

(十六进制)                    |  (二进制)


0000 0000-0000 007F  | 0xxxxxxx

0000 0080-0000 07FF     | 110xxxxx 10xxxxxx

0000 0800-0000 FFFF     | 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-0010 FFFF     | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

C++使用的字符串

  在 C++ 中,以前通常使用 char 表示单字节的字符,使用 wchar_t 表示宽字符,对国际码提供一定程度的支持。 对于宽字符,Windows 系统里是两个字节表示,就是 UTF-16;而 Unix/Linux 系统里为了更全面的国际码支持,其宽字符是四个字节,即 UTF-32 编码。

系统编码格式
 在 Windows 系统里最常用的文本字符编码格式是 ANSI (简体是 GBK,繁体是 Big5)和 Unicode (UTF-16LE)格式,Windows 命令行默认的输入输出格式是 ANSI 的。在 Linux 系统里统统都是 UTF-8,几乎不会用到utf-16


各种编码格式转换
windows下
c++:

不知道为什么代码贴不上去,以后再贴吧,网上都能查到转换的实现抓狂

L 和_T
L不管你是以什么方式编译,一律以UNICODE方式保存。
_T是一个适配的宏~
当  #ifdef _UNICODE的时候 _T就是L
没有  #ifdef _UNICODE的时候 _T就是ANSI的。


ATL的转换宏也可实现编码的zhuanhua

USES_CONVERSION;
A2W  W2A  A2T  T2A

使用很简单生气

c的转换就不写了,上网查一下就知道!!!


阅读全文
0 0
原创粉丝点击