多平台统一管理软件接口,如何实现多平台统一管理软件接口
296
2022-11-04
字符串长度
我记得C#的面试题屡屡出现求字符串的长度的:
string hi = "hi广州"; string res = String.Format(@"{{""data"":""{0}""}}", hi.Length //4 + "," + Encoding.ASCII.GetBytes(hi).Length //4 + "," + Encoding.GetEncoding("gb2312").GetBytes(hi).Length //6,每个汉字gb2312编码为2字节 + "," + Encoding.GetEncoding("utf-8").GetBytes(hi).Length //8,每个汉字utf-8编码为3字节 );
ASCII
美国人将拉丁字符与二进制对应起来。一个字节8位,用了前面7位,最高位为0,因此可以对应128个字符。
扩展ASCII
ASCII码对应128个西文,但欧洲有些国家的字母未能包含在内,于是利用闲置的最高位,可多对应128个字符,多出来的字符编码成为扩展编码。不同国家,例如法国、俄国,其扩展编码就不一样。
ANSI
为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。
不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。
Unicode
又叫万国码,统一码,使用它,妈妈再也不用担心地球上会有字符遗漏。
但是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。什么意思呢?
比如,汉字“严”的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。那么这里是用2个字节,还是3个字节来存储呢?字节的顺序是怎样的呢(所谓的大头、小头方式)?因此就有了 UTF-8,UTF-16,UTF-32等等具体编码方式。
UTF
UTF-8最流行,因为其可变长,对应ASCII码字符1个字节,汉字3个字节,等等;而UTF-16固定双字节,利于传输。
参考资料
http://cppblog.com/qiujian5628/archive/2008/01/24/41773.html
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~