`
smartzxy
  • 浏览: 199945 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

研究了一下字符编码

阅读更多

    凡是在应用中涉及到中文了,都会遇到字符编码问题。之前没有仔细研究,脑中只有一个比较敷衍的概念——在交互中统一字符编码就不会出问题了~具体字符编码会出什么问题,一直没好好研究下。(今早看到华莽邮件里又有人为了字符编码抓狂了,同情下……)


    首先要清楚一下几个概念:

 

    字节(byte):计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间。

    字符(Character):是文字与符号的总称,包括文字、图形符号、数学符号等。

    字符集(Charset):即字符的集合,规定了在这些集合里面有哪些字符。

    字符编码(Encoding):就是规定用一个字节还是多个字节来存储一个字符,用固定的二进制码值表示某个字符。


     目前常见的字符集有ASCII、ISO-8859-1、Unicode、GB2312、GBK、BIG5等。各自都有各自的编码方式,比如“中华”这个词在GBK中编码为:“\xd6\xd0\xbb\xaa”,在Unicode中为:“\u4e2d\u534e”。当然各自的特性也不同,这里就不介绍了。


     在所有这些字符集中,Unicode比较特殊,因为它的野心比较大,想囊括所有语言的字符作为统一字符集,所以编码就不能只用小小一个字节了,所有它能表示的字符都编码为两个字节。但是英语系的家伙们不干了,他们的语言仅仅26个字母,也要用2个字节来编码,传输时岂不是浪费大了!于是想出了UTF-8、UTF-16等针对Unicode的二次编码方式。UTF-8对传统ASCII字符用一个字节来编码,对中文这样的字符用3个字节来编码(我们亏了~)。


     出现乱码问题主要在数据的表现上,也就是显示设备在根据数据中的字符编码值找出相应的字符并加以显示时,使用了错误的编码方式。这个问题只要在通信中交互数据时标记清楚数据所使用的编码方式。在xml中,可以设置:

<?xml version="1.0" encoding="UTF-8"?>

 

     在HTTP传输中可以在报头设置字符集编码方式,HTML也可以标记字符编码,这样浏览器就会自动选择了……


     字符编码不仅仅会引起乱码麻烦,在数据处理中也会惹麻烦。例如Python在“对外”(包括标准输出流)发送Unicode编码的文本数据时,会默认的使用ASCII字符集的codecs将字符转换成ASCII编码,如果含有非ASCII字符集的字符,就会报“UnicodeEncodeError”;在比较Python中的字符串时,如果使用的编码不同,也会报UnicodeEncodeError异常………所以比较乖的方式就像《Python Cookbook》中建议的,在发生IO动作时,I时将数据decode成Unicode,O时再将数据encode成相应的字符编码。

 

     以上是今天下午的学习心得……

 

分享到:
评论
9 楼 IcedCoffee 2010-06-25  
utf-8是3个字节?
我一直以为是2个...
8 楼 trydofor 2010-06-24  
U+00000000 – U+0000007F 0xxxxxxx
U+00000080 – U+000007FF 110xxxxx 10xxxxxx
U+00000800 – U+0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
U+00010000 – U+001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U+00200000 – U+03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U+04000000 – U+7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

------
http://en.wikipedia.org/wiki/GBK#GBK Encoding Ranges
7 楼 whitesock 2010-06-24  
jojo_java 写道
yangguo 写道
utf-8太恶心,中文用三字节,还是使用gbk吧。多国语言支持通常都是一种过度设计与奢侈。

谁跟你说的一定是三个啊

谁跟你说不是?
6 楼 jojo_java 2010-06-24  
yangguo 写道
utf-8太恶心,中文用三字节,还是使用gbk吧。多国语言支持通常都是一种过度设计与奢侈。

谁跟你说的一定是三个啊
5 楼 smartzxy 2010-06-23  
tongxiaobai 写道
UTF-8应该是主流了吧,抛弃GBK吧

感觉有中文的还是gbk好,字符集容量大啊……
4 楼 yangguo 2010-06-23  
utf-8太恶心,中文用三字节,还是使用gbk吧。多国语言支持通常都是一种过度设计与奢侈。
3 楼 tongxiaobai 2010-06-23  
UTF-8应该是主流了吧,抛弃GBK吧
2 楼 woniu1983 2010-06-22  
期待··  我也蛮感兴趣。

目前Coding中主要都是UTF-8, 感觉已经成为了惯例。

因为见到过多次情况,特别是项目配置管理迁移时Encoding的设置问题。
1 楼 jqxl0205 2010-06-20  
期待LZ接下来的文章~

相关推荐

    易语言字符编码转换

    通过深入研究和理解这个易语言字符编码转换源码,开发者不仅可以掌握字符编码的基本概念,还能学习到易语言的具体应用技巧,这对于开发涉及跨平台文本处理或需要与不同编码系统交互的项目非常有帮助。同时,这也是一...

    字符编码和字符集研究

    字符编码和字符集是计算机处理文字和符号的基础。字符集是指一组特定的字符集合,它包含文字、符号、数字等元素。例如,英文字符集包含了所有的英文字母和符号,而汉字字符集则包含了所有汉字。字符集可以是某个语言...

    字符编码文档

    ### 字符编码与Unicode标准:理解CJK统一汉字 在探讨字符编码的世界时,我们不可避免地会遇到Unicode这一全球性标准,尤其是当涉及到中文、日文和韩文(统称为CJK)字符时。本文将深入解析《字符编码文档》中关于...

    Java字符编码及获取文件编码

    在Java编程语言中,字符编码是一个至关重要的概念,它涉及到数据的存储、处理和传输。字符编码决定了如何将字符(如字母、数字、符号)转换为数字表示,以便计算机能够理解并操作它们。本篇文章将深入探讨Java中的...

    字符编码-使用c#研究

    ### 字符编码基础及C#中的应用 #### 一、字符编码概述 在计算机科学领域,字符编码是一项基本且至关重要的技术,它涉及到如何将人类可读的文字转换为计算机能够处理的数据格式。根据Joel Spolsky的观点,“每一位...

    tomcat字符编码总结

    通过对Tomcat环境下字符编码问题的研究,我们可以得出以下几点结论: - 统一编码标准是避免乱码的关键,建议在Tomcat及其应用中统一使用UTF-8编码。 - 对于不同的请求方式,应采取不同的策略来处理字符编码问题。 -...

    简单的文字字符编码加密

    在IT领域,字符编码与加密是信息安全的重要组成部分。本文将基于标题“简单的文字字符编码加密”和描述,探讨字符编码的基础知识以及一个简单的加密过程。字符编码是指将字符转化为二进制数字的过程,以便计算机能够...

    Java网络传输中字符编码问题的研究

    Java网络传输中的字符编码问题主要涉及到Java编程语言在处理不同编码格式时的转换和兼容性。Java语言本身采用Unicode字符集,这是一种国际化的标准,能够支持世界上大多数语言,包括中文。然而,在实际的网络环境中...

    ASCII中英文字符编码查询器

    这是一款字符编码转换器,输入中文,可以输出对应的ASCLL编码,二进制,八进制,十六进制等。 #include int main() { int i; printf("%c%c%c%c%c%c\n",206,210,176,174,196,227); return 0; } 输出内容是:我爱你...

    matlab开发-算术编码字符串

    在IT领域,算术编码是一种高效的数据压缩方法,尤其在文本和图像编码中广泛应用。它基于概率模型,通过连续实数...通过对这个项目的研究,不仅可以理解算术编码的原理,还能掌握如何在实际应用中实现这一高效压缩技术。

    JIS标准编码字符汇总文件包

    《JIS标准编码字符汇总文件包》是针对日文字符编码的一个重要资源,它涵盖了多种JIS(Japanese Industrial Standards)编码体系,对于理解和处理日文文本具有极高的价值。JIS编码是日本广泛采用的标准,它规定了字符...

    所有UNICODE字符的编码表

    总结来说,Unicode字符编码表是一个至关重要的工具,它为全球的信息交流提供了统一的标准,无论你是编写软件、设计网站,还是进行语言学研究,理解并掌握Unicode编码表都将极大地提高你的工作效率和准确性。...

    DICOM标准下中文字符表示及编码的研究与实践

    ### DICOM标准下中文字符表示及编码的研究与实践 ...通过合理选择字符编码方式、优化软件开发流程以及积极参与标准化工作,可以有效地解决当前存在的问题,并促进DICOM标准在中国及其他非英语国家的普及与发展。

    5个各类型字符编码项目源码.rar

    字符编码在IT行业中扮演着至关重要的角色,它是计算机理解和处理文本的基础。本资源包含五个不同类型的字符编码项目源码,采用...通过深入研究这些代码,你将能够更好地应对字符编码相关的挑战,提高你的软件开发水平。

    字符编码 大全

    深入研究字符集编码,不仅可以帮助理解不同编码方式之间的差异,还能促进跨平台和跨语言环境下的数据交换和处理。例如,了解 GB18030 与 UTF-8 之间的差异对于实现中文网页的国际化非常重要。 综上所述,字符编码的...

    JAVA 转换字符编码工具

    在IT行业中,字符编码是一个非常重要的概念,尤其是在处理多语言或者跨平台的数据交换时。`JAVA 转换字符编码工具`显然是一款...对于理解和使用这个工具,以及深入研究字符编码转换,这两个类的源码将是至关重要的。

    字符编码查看器.zip易语言程序源码资源下载

    对于有一定经验的程序员,这个程序源码则提供了深入研究字符编码和易语言程序设计的机会。 总之,字符编码查看器易语言程序源码资源是一份宝贵的教育资源,无论是用于毕业设计,还是作为编程学习的参考资料,都能为...

    Java及相关字符集编码问题研究

    Unicode是一种通用的字符编码方案,旨在提供所有语言文字的统一编码。它使用16位或32位编码,理论上可以表示超过百万种字符。UTF-8是Unicode的一种变长编码方式,兼容ASCII,广泛应用于互联网上的数据传输。 #### ...

    汉字字符编码(utf-8 unicode gb2312)

    汉字字符编码是计算机处理汉字时的关键技术,涉及到不同的编码标准,如UTF-8、Unicode和GB2312。这些编码方式各有特点,各有应用场景,理解它们有助于在处理中文字符时避免乱码问题。 首先,让我们来详细了解这些...

Global site tag (gtag.js) - Google Analytics