zoukankan      html  css  js  c++  java
  • 字符串长度

    我记得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://www.cppblog.com/qiujian5628/archive/2008/01/24/41773.html



  • 相关阅读:
    netstat
    Android总结篇——Intent机制详解及示例总结
    Android系统介绍与框架
    三个绘图工具类详解
    Android 调用 WebService
    Android JSON数据解析
    Android 总结:ContentProvider 的使用
    Android Service完全解析,关于服务你所需知道的一切(下)
    Android Service完全解析,关于服务你所需知道的一切(上)
    Activity的四种加载模式详解:
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257895.html
Copyright © 2011-2022 走看看