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

java 字符集网址收集

阅读更多
一.Java字符编码根本原理
JVM加载class文件读取时候使用Unicode编码方式正确读取class文件,那么原来定义的String s="汉字";在内存中的表现形式是Unicode编码。
具体内容见网址http://lavasoft.blog.51cto.com/62575/273608

二.Unicode,GBK,GB2312,UTF-8概念基础
具体内容见网址:[url]
http://blog.csdn.net/qinysong/archive/2006/09/05/1179480.aspx[/url]

三.Unicode,ISO-8859,GBK,UTF-8编码及相互转换

1、函数介绍
在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有关的两个主要函数为:
1)将字符串用指定的编码集合解析成字节数组,完成Unicode-〉charsetName转换
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

2)将字节数组以指定的编码集合构造成字符串,完成charsetName-〉Unicode转换
public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException

2、Unicode与各编码之间的直接转换
下面以对中文字符串"a中文"的编码转换为例,来了解各种编码之间的转换
1)Unicode和GBK
测试结果如下,每个汉字转换为两个字节,且是可逆的,即通过字节可以转换回字符串
String-GBK〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4
ByteArray-GBK〉String:0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)

2)Unicode和UTF-8
测试结果如下,每个汉字转换为三个字节,且是可逆的,即通过字节可以转换回字符串
String-UTF-8〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87
ByteArray-UTF-8〉String:0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)
3)Unicode和ISO-8859-1
测试结果如下,当存在汉字时转换失败,非可逆,即通过字节不能再转换回字符串
String-ISO-8859-1〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0x3F 0x3F
ByteArray-ISO-8859-1〉String:0x61 0x3F 0x3F-〉\u0061\u003F\u003F(a??)
3、Unicode与各编码之间的交叉转换
在上面直接转换中,由字符串(Unicode)生成的字节数组,在构造回字符串时,使用的是正确的编码集合,如果使用的不是正确的编码集合会怎样呢?会正确构造吗?如果不能正确构造能有办法恢复吗?会信息丢失吗?

下面我们就来看看这种情况,这部分可以说明在某些情况下虽然我们最终正确显示了结果,但其间仍然进行了不正确的转换。

1)能够正确显示的中间不正确转换
我们知道String-GBK〉ByteArray-GBK〉String是正确的,但如果我们采用String-GBK〉ByteArray-ISO-8859-1〉String呢?通过测试结果如下:
String-GBK〉ByteArray-ISO-8859-1〉String:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)

这时我们得到的字符串为?乱码“a????”,但是通过继续转换我们仍然可以复原回正确的字符串“a中文”,过程如下:
String-GBK〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-GBK〉String
对应:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)

也就是我们在首次构造字符串时,我们用了错误的编码集合得到了错误的乱码,但是我们通过错上加错,再用错误的编码集合获取字节数组,然后再用正确的编码集合构造,就又恢复了正确的字符串。这时就属于是“能够正确显示的中间不正确转换”。在Jsp页面提交数据处理时常常发生这种情况。

此外能够正确显示的中间不正确转换还有:
String-UTF-8〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-UTF-8〉String

String-UTF-8〉ByteArray-GBK〉String-GBK〉ByteArray-UTF-8〉String
对应:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u6D93\uE15F\u6783(a涓枃)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)

4、编码过程中错误诊断参考
1)一个汉字对应一个问号
在通过ISO-8859-1从字符串获取字节数组时,由于一个Unicode转换成一个byte,当遇到不认识的Unicode时,转换为0x3F,这样无论用哪种编码构造时都会产生一个?乱码。
2)一个汉字对应两个问号
在通过GBK从字符串获取字节数组时,由于一个Unicode转换成两个byte,如果此时用ISO-8859-1或用UTF-8构造字符串就会出现两个问号。
若是通过ISO-8859-1构造可以再通过上面所说的错上加错恢复(即再通过从ISO-8859-1解析,用GBK构造);
若是通过UTF-8构造则会产生Unicode字符"\uFFFD",不能恢复,若再通过String-UTF-8〉ByteArray-GBK〉String,则会出现杂码,如a锟斤拷锟斤拷
3)一个汉字对应三个问号
在通过UTF-8从字符串获取字节数组时,由于一个Unicode转换成三个byte,如果此时用ISO-8859-1构造字符串就会出现三个问号;用GBK构造字符串就会出现杂码,如a涓枃。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qinysong/archive/2006/09/05/1179489.aspx
具体内容见网址:[url]
http://blog.csdn.net/qinysong/archive/2006/09/05/1179489.aspx
[/url]

四.Java应用中的编码问题
具体内容见网址:[url]
http://blog.csdn.net/qinysong/archive/2006/09/05/1179513.aspx[/url]
分享到:
评论

相关推荐

    JAVA字符串操作类CTool.java字符转换类.rar

    JAVA字符串操作类CTool.java字符转换类,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。封装的功能:字符串从GBK编码转换为Unicode编码、对字符串进行md5...

    zxing.java源码解析-Specialsymbols:一些字符集编码资料收集

    一些字符集编码资料收集 unicode码钱128位为ASCII码,java中可以通过 int offset = 0; String name = “@”; int codePoint = Character.codePointAt(name, offset); codePoint 等于 64 该篇对字符集编码及java开发...

    Java技术大合集

    10. **Java虚拟机(JVM)**:理解JVM的工作原理,包括类加载机制、内存模型(堆、栈、方法区等)、垃圾收集以及性能调优,对于优化应用程序性能至关重要。 11. **Spring框架**:Spring是最流行的Java企业级应用框架...

    java常用字符串方法网络收集txt版

    在Java编程语言中,字符串是极其重要且常用的数据类型,用于存储和操作文本。字符串类`String`在Java中有着丰富...通过阅读"java常用字符串方法网络收集txt版",开发者可以系统地学习和掌握Java字符串处理的各种技巧。

    Java CTool.java一个好用的字符串操作类.rar

    分享一个Java字符串操作类CTool.java源代码下载,包括了字符串转换功能,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。这个类的功能可实现将数据从数据库中...

    Java精品文章全集chm

    1. **Java基础知识**:这可能包括Java语法、面向对象编程概念(类、对象、继承、多态等)、数据类型、流程控制语句(if、switch、for、while)、异常处理、字符串操作等。 2. **Java进阶特性**:可能涉及泛型、枚举...

    JAVA习题集JAVA习题集.doc

    JAVA习题集 1. 在环境变量 classpath 中设置”.”,代表什么意思? 知识点:环境变量 classpath 的作用是告诉 Java 编译器和 Java 运行时环境(JRE)哪里可以找到类文件和资源文件。在 classpath 中设置“.”,...

    JAVA技术合集(CHM).CHM

    《JAVA技术合集(CHM).CHM》是一个包含大量JAVA技术资源的压缩文件,它为开发者提供了丰富的学习和参考材料。CHM(Compiled Help Manual)是微软开发的一种帮助文档格式,通常用于存放电子书籍或软件的离线帮助文档。...

    java全集[收集].pdf

    这份"java全集[收集].pdf"文档似乎是一份全面的Java学习资料,涵盖了从基础知识到高级特性的全面讲解。 首先,让我们深入了解一下Java的特点。Java最显著的特点是其“一次编写,到处运行”(Write Once, Run ...

    java常见问题收集

    charset=UTF-8")`设置响应类型和字符集,然后使用`ServletOutputStream`和`OutputStreamWriter`对象来输出HTML内容。 ### 6. Java Web服务器的CLASSPATH配置 在Java Web服务器上部署应用时,正确的CLASSPATH配置至...

    JAVA面试题集-个人网络收集整理。

    ### JAVA面试题集知识点解析 #### 一、Java与C++中的异常处理机制对比 - **Java中的异常处理**:Java通过内置的异常处理机制来管理程序运行时可能发生的错误情况。当Java程序中出现异常时,系统会抛出一个异常对象...

    Java.NIO资源下载资源下载

    - **Charsets**:详细讨论了 Java 中支持的各种字符集,以及如何在 Java 程序中正确地使用它们。 - **CharsetServiceProvider 接口**:介绍了 CharsetServiceProvider 接口的作用及其实现方式。 ### 结论 Java NIO...

    The Java Language Specification, Java SE 11 Edition.rar

    同时,字符集部分讲述了Unicode支持以及字符编码的处理。 十、反射与注解 反射是Java动态性的重要体现,允许在运行时检查类和对象的信息。注解则为元数据提供了便利,规范中详细介绍了它们的使用和作用。 以上只是...

    java常见面试题合集

    - 垃圾回收算法:了解标记-清除、复制、标记-整理和分代收集等算法。 4. **多线程**: - 线程的创建:通过Thread类和实现Runnable接口两种方式。 - 线程同步:synchronized关键字,wait()、notify()和notifyAll...

    大厂java面试合集.zip

    - **垃圾回收**:理解GC的工作原理,包括可达性分析、垃圾收集算法(如标记-清除、复制、标记-整理、分代收集)。 - **JVM调优**:了解JVM参数设置,进行性能优化。 6. **多线程** - 线程的创建:通过Thread类和...

    最新版---JAVA专业术语集

    5. **垃圾收集(Garbage Collection, GC)**:Java自动进行内存管理,垃圾收集器会自动回收不再使用的对象所占用的内存,程序员无需手动释放。 6. **集合框架(Collections Framework)**:Java提供了丰富的数据...

    Java面试全集上中两集.rar

    《Java面试全集》是为Java开发者准备的一份详尽的面试指南,涵盖了从基础到高级的各种Java技术问题。这份资料分为上下两部分,旨在帮助求职者全面掌握Java编程的知识点,以应对各类面试挑战。 在Java面试中,通常会...

    oracle-java.rar_oracle

    Oracle数据库默认使用的字符集可能与Java应用程序的编码不匹配。Oracle支持多种字符集,如AL32UTF8(Unicode UTF-8)和ZHS16GBK(简体中文GBK)。而Java应用程序通常使用UTF-8编码。如果两者不一致,就会导致中文...

    Java程序设计习题集下载

    本习题集收集了Java程序编写常见问题,并以习题形式总结和归纳Java程序设计知识要点,同时兼顾了SCJP(Sun公司 Java程序员认证考试),从而降低学习难度,减少编写程序出现错误的枘地,也便于掌握各个知识要点或测试...

Global site tag (gtag.js) - Google Analytics