您的位置:首页 > 编程语言 > Java开发

java中关于编码问题

2014-05-23 21:25 260 查看
  刚刚开始学习java,用的是命令行编译与执行,所以总会出现因为编码问题而出现的编译乱码导致编译不通过。下面详细说一下,在编写java程序时,当出现乱码时,到底是哪里出了问题。

  对于编码格式,不多说了,咱们用的比较经常的就是UTF和GB2312了。咱们的中文系统由于是简体中文的,也是GB2312编码模式。所以当用纯文本编写程序时,我们可以选择将要保存的形式,到底是ANSI还是utf,如果选择了UTF-8形式,当我们编译时,会报错,引文win下的纯文本编辑器它默认的在文本前方将BOM,所以大部分编译错误都会指向程序的第一个字符。所以,若想编译通过,最好保存为ANSI,但是又为了通用性,当然也可以保存为UTF-8形式,但是在编译时要加上-ENCODING UTF-8,这样才能编译通过。

在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。

在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7
bits来表示一个字符,总共表示128个字符,其中包括了英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8 bits表示一个字符,可以表示256个字符,主要在原来的7
bits字符集的基础上加入了一些特殊符号例如制表符。

后来,由于各国语言的加入,ASCII已经不能满足信息交流的需要,因此,为了能够表示其它国家的文字,各国在ASCII的基础上制定了自己的字符集,这些从ANSI标准派生的字符集被习惯的统称为ANSI字符集,它们正式的名称应该是MBCS(Multi-Byte
Chactacter System,即多字节字符系统)。这些派生字符集的特点是以ASCII 127 bits为基础,兼容ASCII
127,他们使用大于128的编码作为一个Leading Byte,紧跟在Leading
Byte后的第二(甚至第三)个字符与Leading Byte一起作为实际的编码。这样的字符集有很多,我们常见的GB-2312就是其中之一。

例如在GB-2312字符集中,“连通”的编码为C1
AC CD A8,其中C1和CD就是Leading
Byte。前127个编码为标准ASCII保留,例如“0”的编码是30H(30H表示十六进制的30)。软件在读取时,如果看到30H,知道它小于128就是标准ASCII,表示“0”,看到C1大于128就知道它后面有一个另外的编码,因此C1
AC一同构成一个整个的编码,在GB-2312字符集中表示“连”。

由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,提出了Unicode字符集,它固定使用16 bits(两个字节、一个字)来表示一个字符,共可以表示65536个字符。将世界上几乎所有语言的常用字符收录其中,方便了信息交流。标准的Unicode称为UTF-16。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。注意UTF-8是编码,它属于Unicode字符集。Unicode字符集有多种编码形式,而ASCII只有一种,大多数MBCS(包括GB-2312)也只有一种。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: