字符集(ansi、unicode、utf-8、utf-16、多字节字符(mutil-byte)、宽字节字符)

1、宽字节就是在说unicode,多字节就是在说ansi、gb等。
2、unicode是一种字符集,utf-8等 是它的不同实现方式,可以实现所有语言的表示。
3、unicode和ucs是一种字符规范,也叫字符集。是 为了统一全世界各国语言文字和专业领域符号(例如数学符号、乐谱符号)的而出现的编码,这两个由不同的组织制定,但目前是一模一样的(多点这样的多好)。
4、整理一下c++开发中的代码编码、中文编码、不同平台网络传输的相关问题。
(1)字符和字节的区别:字节就是一个8位的01机器码,,‘1’这是个字符,使用不同的编码方式,它将占用不同的字节,一个字节表示一种字符的这种方式是早期的表示方法,只能表示很少的字符(英文,标点等)。假如“你”这个字符经过utf-8编码后,将要占用3个字节,这种字符在c语言中(注意,此时已经相当于被编码了)被称为多字节字符。这种字符实际是以字节来统计,使用\0结尾,传统的字符处理函数都是以此为基础的。但是有时我们想知道一个字符串里有几个字符而不是几个字节,所以c语言定义了wchar这种字符类型来表示这种字符,称为宽字节字符,是以字符来统计的。他们当然都可以表示不同的字符集。
(2)编码:编译前的代码会以一定的格式保存在磁盘中,windows的vside中默认是用gb2312的中国区代码页编码,linux中默认是用utf-8编码的,所以同样一个中文字符,比如说“你”这个字符,如果这样直接从windows传入linux则会显示乱码。vs中的有字符集设置,但编码设置需要使用另存为修改(还有别的办法的)。当这些代码被编译器编译的时候“你”这个编码会被直接放进目标代码中,即使用的是编辑器的编码格式。linux是这么做的,windows还要查一下。因为根据测试,目前在windowsvs2008中,使用unicode字符集,使用char保存字符,传入linux依然是乱码,经过将char做ansi到unicode,unicode到utf-8转换,则,linux段接收显示均无问题。
(3)对2中测试的一些猜测,一、char在到达socket之前被保存在string中,是不是它的关系导致?二,vs在编译过程中依然使用os所使用的编码格式,即还是使用gb2312而不是utf-8?
(4)对2的测试结果,和一没关系,vs在编译过程中依然使用gbk编码格式,所以要想发送到linux段进行显示,必须进行以上转化成为utf-8.

你可能感兴趣的:(字符集(ansi、unicode、utf-8、utf-16、多字节字符(mutil-byte)、宽字节字符))