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

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

字符编码方式

早期是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的转换就不写了,上网查一下就知道!!!


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值