免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1864 | 回复: 0
打印 上一主题 下一主题

Java字符集转换解释[转] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-22 18:34 |只看该作者 |倒序浏览
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文件指定,资源连接点配置中指定.
不能正常显示原因通常在两个地方:字符集;字库。对于通用的软件,一般都提供完整的字库支持。所以一般问题是解码不正确。
术语:
字符集:字符编码集
编码格式:字符编码的规格,可大致视为和字符集是同一回事,其实还是有区分的
编码:encode
解码:decode
如有兴趣可联系
lazet@163.com
.
http://www.trucy.org/blog/archives/eoiae/000207.html
每个软件系统内部都只使用1种字符码来表示内存中数据,如java使用unicode来表示。
但由于unicode码的数据没有纠错能力,所以在用文件或数据库来存放数据时很少直接采用。
utf-8及utf-16是从为unicode码提供纠错能力这个目的发展起来的。由于utf-8和过去的ascii兼容,所以utf-8成为主流用于存储unicode码的转换编码方式。utf-8及utf-16不是一种编码,仅仅是一种编码转换规则而已。
gbk(gb2312,gb18030)是遵循unicode而制定的用于汉字编码的unicode码。
iso8859-1是西欧文字编码。用完了一个字节的所有256个代码。
在java系统里,内存中的数据必须用unicode编码,所以读取各种存储设备的数据时,都需要先根据存储设备中的数据的编码规则进行解码读取;存储数据时,需要根据存储设备要求的编码规则进行编码存储。所以在java内存中以unicode为中介,可以在各种编码规则之间来回自由转换。
http://www.trucy.org/blog/lazet/archives/000649.html


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/9085/showart_44038.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP