关于gb2312和GBK的一点疑问,请高手勿取笑

rainworm 2004-03-17 03:19:02
我们知道,数据库是以gb2312编码形式保存
但在jsp页面中设置charset=GBK的时候
在显示数据库内容的时候不用经过转码就能正常显示
请问gb2312和GBK两者之间有何相同之处和不同之处?
请高手赐教
...全文
72 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainworm 2004-03-17
  • 打赏
  • 举报
回复
感谢 kingmaxno1朋友指点,偶接触的数据库不是太多
:)
Leemaasn 2004-03-17
  • 打赏
  • 举报
回复
糟糕,,,又被人說完了。。。
kingmaxno1 2004-03-17
  • 打赏
  • 举报
回复
楼主,你这句说的不对
“我们知道,数据库是以gb2312编码形式保存”
不是所有数据库都是以gb2312编码形式保存,我知道的,mysql和oracle就不是用这种编码保存的,不信你转码后加进去,在不转码取出来试试,
同意楼上的说法,gb2312<gbk但是有的系统不支持gbk,所以建议使用gb2312,通用性强一些
rainworm 2004-03-17
  • 打赏
  • 举报
回复
谢谢各位,特此结帐!
yanglei031 2004-03-17
  • 打赏
  • 举报
回复
Java系统内的字符以双字节存储,采用unicode(utf-16之一)编码。(估计jdk后续版本的java字符编码可能提升为4字节,这样可彻底解决东方国家字库问题。)
Utf-8是一种标准存储编码格式,用utf-8编码后的字节流具有非常好的纠错和兼容能力。用utf-8编码(encode)unicode码时不会有信息损失。当然用utf-8解码(decode)utf-8编码的字节流,生成unicode码时也不会有信息损失。但禁止用utf-8解码非utf-8编码的字节流。总之Utf-8可以编码任何unicode 码,但只能解码utf-8编码的字节流。
Utf-16和utf-8用法是一样的,仅是一点不同:utf-16是双字节倍数编码,utf-8是单字节倍数编码,在英文国家里用utf-8和ascii编码后的字节流是一样的,这样有利于系统平稳升级到支持utf-8的系统里,但系统要升级到支持utf-16就要把所有数据都更新一遍,这显然不能接受。注意:utf-16根据字节排序不同有两种编码


Iso8859-1是西方国家频繁使用的字符编码格式。用iso8859-1编码unicode码中的东方字库部分的字符时统统编码成??,也就是说:用iso8859-1编码unicode码时信息会有损失。但用iso8859-1解码任意(iso8859-1编码的和非iso8859-1编码的)字符流时,信息不会有损失,这是因为一个字节中的所有256个字符对iso8859-1都是合法的都是合法的。有时候在一些linux操作系统和一些应用服务器里,默认的解码方式是iso8859-1,这是大多数乱码的原因。
Gb18030,gbk,gb2312是汉字字符的编码格式,用gb18030(gbk,gb2312和gb18030是同一系列,不过字库要小,但使用方式是一样的,这里不区分,统统用gb18030)编码unicode码时非中英文的字符会被编码为?,也就是说,用gb18030只能编码unicode中的中英文字符,其他的字符都会被损失掉。同样用gb18030解码只能解码gb18030编码的字符流。
Xml文件中 是告诉浏览器要用要用指定的编码格式解码自身这个文件,当然要求浏览器首先要支持这个编码格式(在客户端),jsp页面的字符集是告诉jsp服务器要用要用指定的编码格式解码自身这个jsp文件(在服务器段). 然而在servlet程序中response.setContentType("text/html; charset=GBK");是告诉servlet程序用指定编码格式编码(在服务器段)
字符集转换的基本思想很简单,用某种字符编码规则编码,就用什么编码规则解码,经常出问题的深层次原因是java对字节流未提供编码信息,可以认为这是一个严重的失误。估计未来的java能提供这样的信息。…待续
涉及编码问题的地方有:java类文件编辑时,java类文件编译时,实施文件,服务器指定,jsp文件内指定,xml(html)内指定,servlet文件指定,资源连接点配置中指定.
不能正常显示原因通常在两个地方:字符集;字库。对于通用的软件,一般都提供完整的字库支持。所以一般问题是解码不正确。

四周的风景 2004-03-17
  • 打赏
  • 举报
回复
wandou999 2004-03-17
  • 打赏
  • 举报
回复
gb2312和GBK从本质来说没什么不同,不同的系统默认的不同,有的默认GBK(大多数)
但它识别gb2312,于是把gb2312转化成GBK,有的系统则不可以!!!!!!
ddadoris 2004-03-17
  • 打赏
  • 举报
回复
gb2312范围较小,只包括两三千个常用汉字。
GBK包含了几乎所有的汉字。
所以如果有生僻汉字不能正常显示,而其他汉字可以,那么就使用GBK就解决了
sean_gao 2004-03-17
  • 打赏
  • 举报
回复
GB2312<GBK<GB18030
GB2312大概是94年出来的,GBK是2000年的标准吧。

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧