`
Jcat
  • 浏览: 49783 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

字符编码小研究

阅读更多
在Grails项目中,实现国际化,遇到了中文乱码的问题,几经学习问题解决了。本着打破砂锅的精神,又折腾到凌晨2点,初步研究了一下字符编码等知识。

====基础====

---ANSI---
字符编码:
ASCII = 英文字母编码
GB2312 = ASCII + 简体编码(对ASCII的中文扩展)
Big5 = ASCII + 繁体编码
(还有针对日语、韩语等字符编码)
以上统称为ANSI,也就是操作系统的默认编码


---Unicode---
Unicode:万国码,任何字符都是2个字节
UTF-8:Unicode的“英文”压缩形式,经过一定算法的转换,英文只用1个字节,汉字用3个字节。所以适合英文为主的网站。
UTF-16:不压缩,任何字符都是2个字节,看似适合中文为主的网站,但仔细想想HTML语言又包含大量英文,所以还是用GB2312比较合适(英文1字节、中文2字节)。
注:UTF主要是互联网兴起后,需要考虑传输效率才出现的。


---测试---
用记事本输入“严严”,另存为的时候选择不同的编码,在用UE查看16进制

文件头内容
ANSID1 CF  D1 CF
UnicodeFF FE25 4E  25 4E
Unicode-BFE FF4E 25  4E 25
UTF-8EF BB BFE4 B8 A5  E4 B8 A5


超级混淆:这里的Unicode(保存格式)其实意思是UTF-16-Little-Endian(小尾、逆序),而Unicode-B和Unicode(原始编码)在编码上是一致的。
Mac中使用大尾格式,Windows或Linux使用小尾格式。

---文件头---
如果没有文件头,操作系统就会以默认的ANSI进行解码。
UTF-8的文件头,其实就是Unicode-B的文件头进行UTF-8算法得来的:FEFF --> EFBBBF。所以UTF-8也是顺序的。


====JAVA====
Java因为其跨平台的需求,在内部运算中,涉及到的所有字符串都会被转化为unicode来进行运算。
所以代码都以UTF-8来存放,就最不容易出现乱码问题。



---native2ascii---
JDK提供了将“字符”转化为“unicode编码”的工具

txt文件保存的内容“严严”

C:\Users\Calvin\Desktop\test1>native2ascii ANSI.txt ANSI.ascii.txt
\u4e25\u4e25

连文件头也编码了。。。是不是有点多余。。
C:\Users\Calvin\Desktop\test1>native2ascii -encoding utf-8 utf8.txt utf8.ascii.txt
\ufeff\u4e25\u4e25

乱码:因为utf8.txt是utf-8格式的,而没有指定-encoding参数,就会以系统默认的ANSI去解析,就出现错误
C:\Users\Calvin\Desktop\test1>native2ascii utf8.txt utf8.ascii2.txt
\u9518\u5938\u5f17\u6d93\ufffd




====Grails i18n====
1. 字典:位于grails-app/i18n下,默认会创建好几种语言的属性文件,我们只需要保留messages.properties和messages_zh_CN.properties即可
2. 使用:gsp页面中,<g:message code="company.name"/>
3. 自动识别:默认是以浏览器的设置进行语言的识别

4. 手动选择:
    <div class="right">
         <g:link url="${request.requestURI}?lang=en_US">English</g:link>
       | <g:link url="${request.requestURI}?lang=zh_CN">中文</g:link>
    </div>


中文乱码问题
1. 检查发现messages_zh_CN.properties是GBK编码的,所以会被读成乱码
2. 解决办法,仍然是GBK编码,但是将中文转化为unicode
company.name=\u516c\u53f8
   但这样编辑起来很痛苦
3. 也可以将properites文件保存为UTF-8格式
company.name=公司
   这样即方便编辑,又不会有乱码
注:但保存为UTF-16是不行的,网上都说properites文件只能用unicode保存中文,我推测是Grails做了类似工作来兼容UTF-8的格式。
Properties prop=new Properties();         
prop.load(new InputStreamReader(Client.class.getClassLoader().getResourceAsStream("config.properties"), "UTF-8"));




参考
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

  • 大小: 15.8 KB
  • 大小: 4.2 KB
1
1
分享到:
评论
1 楼 vigiles 2014-01-07  
不知道表单验证中的错误提示时如何通过properties文件配置的?

相关推荐

    易语言字符编码转换

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

    字符编码和字符集研究

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

    字符编码文档

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

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

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

    字符编码-使用c#研究

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

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

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

    tomcat字符编码总结

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

    简单的文字字符编码加密

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

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

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

    ASCII中英文字符编码查询器

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

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

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

    matlab开发-算术编码字符串

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

    所有UNICODE字符的编码表

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

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

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

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

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

    字符编码 大全

    ### 字符编码大全 #### 一、TXT文本的编码问题及汉字编码介绍 文本文件的编码方式对于确保数据正确无误地被计算机读取至关重要。本文档首先从基础出发,探讨了不同编码方式及其在处理中文字符时的应用。 1. **...

    JAVA 转换字符编码工具

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

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

    字符编码查看器是一款基于易语言开发的小程序,其功能主要是展示和分析各种字符编码格式,如ASCII、UTF-8、GBK等,对于开发者来说,这是了解和调试编码问题的得力助手。 首先,我们要了解字符编码的基本概念。字符...

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

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

Global site tag (gtag.js) - Google Analytics