黑马程序员技术交流社区

标题: GBK、UTF8、ASCII之间的区别 [打印本页]

作者: 李政    时间: 2012-9-17 19:06
标题: GBK、UTF8、ASCII之间的区别
本帖最后由 李政 于 2013-7-26 10:01 编辑

先来看下面的代码 不知道为什么 总是提示类重复等两个错误

import java.io.*;
class OutputDemo
{
        public static void main(String[] args) throws IOException
        {
                DataOutputStream dos = new DataOutputStream(new FileOutputStream("a.txt"));

                dos.writeInt(98);
                dos.writeInt(250);
                dos.close();
        }
}

在上面的代码中dos调用write方法 写97 存入记事本里面的是a 这个应该是用ASCII码编码
                               如果写250,为什么用的是GBK了?
另外一种编码方式是UTF8,那么这三种编码方式有什么区别呢?


参考从网上查询到的一些资料:
GBK,UTF8都是一种字符集,就是一种编码方式~

字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,

常见字符集名称:ASCII字符集、GB2312字符集、UTF8字符集、 GB18030字符集、Unicode字符集等。

计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。


问题解决了
GBK兼容ASCII字符集 在GBK中,中文两个字节,英文字母一个字节
UTF-8 占用1到3个字节,兼容ASCII,中文占三个字节,英文占一个字节
           UTF-8中,每个字符对应的字节都有相应的标记,从而确定解码的时候需要读取几个字节。


作者: 程振    时间: 2012-9-17 19:57
知道他们都是字符集,感觉UTF-8现在是最后的,可变长表示,即使用1-4个字节来表示字符
你可以看看下面的连接
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
作者: 史小兵    时间: 2012-9-17 20:08
utf-8是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一 个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持 UTF8字符集的浏览器上显示。
GBK 是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中 文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大.
ASCII码是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
普通的ASCII码是0-127扩展的是128-255
windows 是有默认的编码的  而编码信息一般是集成在硬件或者操作系统上的  也就是说一般的系统上都可以使用很多种编码,关键是当前软件使用什么编码,,如果你没设置 就使用默认(软件使用操作系统默认编码)...JAVA是使用Unicode编码 那也只是在内存中的存放形式是UNICODE
而用java写入的本地文件  还是用的本地操作系统的编码....
一般情况下 在java程序内部信息传递 不考虑编码 因为都是UNICODE  
但是将文件,写到磁盘或者进行网络传递 ,才需要考虑编码
一般使用的都是0-127的ascii码表,你计算机上默认的码表应该就是GBK所以才会出现这种情况


作者: 史小兵    时间: 2012-9-17 20:08
utf-8是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一 个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持 UTF8字符集的浏览器上显示。
GBK 是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中 文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大.
ASCII码是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
普通的ASCII码是0-127扩展的是128-255
windows 是有默认的编码的  而编码信息一般是集成在硬件或者操作系统上的  也就是说一般的系统上都可以使用很多种编码,关键是当前软件使用什么编码,,如果你没设置 就使用默认(软件使用操作系统默认编码)...JAVA是使用Unicode编码 那也只是在内存中的存放形式是UNICODE
而用java写入的本地文件  还是用的本地操作系统的编码....
一般情况下 在java程序内部信息传递 不考虑编码 因为都是UNICODE  
但是将文件,写到磁盘或者进行网络传递 ,才需要考虑编码
一般使用的都是0-127的ascii码表,你计算机上默认的码表应该就是GBK所以才会出现这种情况






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2