zoukankan      html  css  js  c++  java
  • 计算机编码

    从计算机对多国语言的支持角度看,大致可以分为三个阶段:

    image

    image

    ISO-8859-1

    iso-8859-1最多能表示的字符范围是0-255(编码范围是0x00-0xFF),其中0x00-0x7F之间完全和ASCII一致(ASCII是7位编码,能个表示128个字符),因此向下兼容ASCII,

    由于ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO 8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,所以很多情况下(如很多协议传输数据时)都使用ISO 8859-1编码,由于ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO 8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,所以很多情况下(如很多协议传输数据时)都使用ISO 8859-1编码

    比如,虽然“中文”两个字符就不存在ISO 8859-1编码,但可以用iso8859-1编码来“表示”。通过查询下文将要介绍的GB2312编码表,“中文”应该是"d6d0 cec4"两个字符,使用ISO 8859-1编码来“表示”的时候则将它拆开为4个字节来表示,即"d6 d0  ce c4"(事实上,在进行存储的时候,也是以字节为单位处理的)。如果使用Unicode编码,则表示为"4e2d 6587";使用UTF编码,则是6个字节"e4 b8 ad  e6 96 87"。很明显,这种使用ISO 8869-1对汉字进行表示的方法还需要以另一种编码为基础。

    有些环境下,将ISO 8859-1写作Latin-1。

    UTF-8

    UTF-8编码是最灵活的UTF编码形式,即兼容ISO 8859-1的编码,同时也可以用来表示所有语言的字符。显然,UTF-8编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,UTF编码自带简单的校验功能。

    由于不同 ANSI 编码所规定的标准是不相同的,因此,对于一个给定的多字节字符串,我们必须知道它采用的是哪一种编码规则,才能够知道它包含了哪些“字符”。而对于 UNICODE 字符串来说,不管在什么环境下,它所代表的“字符”内容总是不变的。

    image

    所以在java中一个字符char一般表示两个字节(16bit) 来表示

    几种错误理解的纠正

    误解:“ISO-8859-1 是国际编码?”

    非也。iso-8859-1 只是单字节字符集中最简单的一种,也就是“字节编号”与“UNICODE 字符编号”一致的那种编码规则。当我们要把一个“字节串”转化成“字符串”,而又不知道它是哪一种 ANSI 编码时,先暂时地把“每一个字节”作为“一个字符”进行转化,不会造成信息丢失。然后再使用 bytes = string.getBytes("iso-8859-1") 的方法可恢复到原始的字节串。

    误解:“Java 中,怎样知道某个字符串的内码?”

    Java 中,字符串类 java.lang.String 处理的是 UNICODE 字符串,不是 ANSI 字符串。我们只需要把字符串作为“抽象的符号的串”来看待。因此不存在字符串的内码的问题。

  • 相关阅读:
    flash中网页跳转总结
    as3自定义事件
    mouseChildren启示
    flash拖动条移出flash无法拖动
    需要一个策略文件,但在加载此媒体时未设置checkPolicyFile标志
    Teach Yourself SQL in 10 Minutes
    电子书本地转换软件 Calibre
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes – Page 31 练习
  • 原文地址:https://www.cnblogs.com/dashuai01/p/4874247.html
Copyright © 2011-2022 走看看