从一篇帖子开始,http://blog.csdn.net/sfdev/archive/2009/01/13/3770706.aspx, 决定好好探究一下unicode和utf-8的关系.
总算大约明白:unicode是一种编码方式,它涵盖了世界上大多数国家语言字符并对其编码, 使每个编码都唯一; 这个工作使每个字符有了一个编号;也可以说这个工作是把世界范围内的字符映射到一个自然数集。
问题1:我这样理解对么?维基百科中关于unicode的解释中有一句话:Unicode 的实现方式不同于编码方式。一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同。Unicode 的实现方式称为Unicode转换格式(Unicode Translation Format,简称为 UTF)。
我这样理解这句话:
如果直接用unicode编码存储或传输字符,会遇到问题,因为计算机中存贮,传输的单位是字节,遇到的问题是:不好断字,一个字符占用几个子节无法确定,(还有一个问题是不同系统平台的设计不一定一致,这个先不说);所以需要有一种机制实现编码到字节序列的映射,并且能够标明字符边界:比如utf-8中:在ASCII码的范围的,用一个字节表示,且最高位为0;大于ASCII码的,比如110xxxxxx前三位的二进制表示告诉我们这是个 2BYTE的UNICODE字符;1110xxxx是个三位的UNICODE字符,依此类推.
问题2: 我这样理解unicode的实现方式对么?同时, 既然unicode只是一种编码方式,不是实现方式,那么打开记事本选择:file -> save as -> encoding选项中unicode是指哪种实现方式? unicode little endian?
问题3: String s = new String(new char[]{'A'}); s放的是字符序列,是哪种编码? 平台的编码还是unicode? s.getBytes("utf-8")得到该字符串的utf-8编码方式的byte序列,那么s.getBytes("unicode");又是哪种实现方式? unicode little endian?
欢迎讨论,欢迎指导!
给链接的不要, 因为你看到我都看过.