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

Java乱码问题分析(转)

阅读更多

java采用unicode编码来处理字符。Java程序无论是从/往文件系统以字符流读/写文件,还是往URL连接写HTML信息,或从URL连接读取参数值,都会有字符编码的转换。编/解码过程如下图:

乱码产生的根本原因是由于编码和解码采用的不是同一种码(GBK,UTF-8,ISO8859-1)。

字符串(String或char[])"123你"经过编码后的字节流(unicode字节流)为31 00 32 00 33 00 60 4f。如果你用new String("123你".getBytes("iso8859-1"), "gbk")来创建这个字符串时就会产生乱码。

因为getBytes("iso8859-1")取得的是"123你"经过iso8859-1编码后的字节流31 32 33 3f (iso8859-1字节流),
而在用new String(bytes, "gbk")构造字符串时java会将iso8859-1字节流(31 32 33 3f)当作是unicode字节流(因为java是采用unicode来处理字符的,所以它把字节流统统当作是unicode字节流来处理),因此31 32 33 3f也被它看成了是unicode字节流。而unicode字节流(31 32 33 3f)经过gbk编码后当然是123?了。于是,乱码产生了。

l         Javac是以系统默认编码(file.encoding系统属性)读入源文件,然后按Unicode进行编码的。

 

l         JAVA运行的时候,JAVA也是采用Unicode编码的,为了高度利用内存空间提高效率对Unicode字符编码采用了UTF-8的方式编码,并且默认输入和输出的都是操作系统的默认编码。

 

l         也就是说在new String(bytes,encode)中,系统认为输入的是编码为encode的字节流,换句话说,如果按encode来翻译bytes才能得到正确的结果;而在new String(bytes)中采用的就是根据file.encoding系统属性读入的编码方式来进行编码,同样也必须根据系统默认的编码才能得到正确的结果,这个结果最后要在JAVA中保存,它还是要从这个encode转换成Unicode,因为在JAVA中各种字符均是以Unicode的形式来处理的。

 

l         也就是说有bytes-->encode字符-->Unicode字符的转换;而在String.getBytes([encode])中,系统要做一个Unicode字符-->encode字符-->bytes的转换。

 

出自:http://www.jdsyxx.net/oblog313/user1/2/archives/2010/3119.html

及:http://www.360doc.com/content/07/0507/20/17598_487208.shtml

分享到:
评论

相关推荐

    JAVA中文乱码深度分析

    Java使用Unicode作为内部编码,这允许其跨平台兼容性,但同时也引出了中文乱码的问题。当Java程序在不同的操作系统或浏览器上运行时,如果没有正确处理编码转换,就可能导致乱码。 1. 中文问题的来源: - Unicode...

    java获取乱码问题

    ### Java获取乱码问题解析与解决方案 在Java应用开发过程中,字符编码问题一直是困扰开发者的一大难题,尤其是在处理HTTP请求中的中文或特殊字符时,经常会出现乱码现象。本文将详细介绍如何通过修改`server.xml`...

    java中文乱码解决问题

    下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的表单数据中有中文字符 在 Servlet/JSP 程序中,通过请求对象的 getParameter() 方法得到的字符串是以 ISO-8859-1 转换而来,这...

    Java乱码问题解决

    ### Java乱码问题详解与解决方案 #### 一、问题背景 在Java开发过程中,尤其是在处理中文字符时,经常遇到字符编码不一致导致的乱码问题。由于Java默认使用Unicode编码,而在中国大陆地区,常见的字符集为GB2312...

    java中文乱码问题

    今天,我们将从编码角度分析 Java 编译后在控制台和 Web 等终端显示乱码问题。 一、 Java 处理字符的原理 Java 使用 UNICODE 来存储字符数据,处理字符时通常有三个步骤:按指定的字符编码形式,从源输入流中读取...

    java中文乱码分析

    ### Java中文乱码分析 #### 一、概述 在Java Web开发中,中文乱码问题是一个常见的技术难题,尤其在处理HTTP请求时尤为突出。本文将深入探讨HTTP请求中的中文乱码现象,并提供相应的解决方案。 #### 二、HTTP请求...

    java中文乱码问题解决

    本文将深入分析Java中文乱码问题的根本原因,介绍各种编码格式的区别和应用场景,并提供解决乱码问题的方法和经验。 在Java中,常见的编码格式有: * ASCII码:总共有128个,用一个字节的低7位表示,0~31是控制...

    中文乱码问题分析 自己总结的

    中文乱码问题分析 中文乱码问题是 Java 和 JSP 开发中的一种常见问题,主要是由于 Java 和 JSP 源文件的保存方式是基于字节流的,而编译成 class 文件过程中,使用的编码方式与源文件的编码不一致所致。在 Java ...

    java乱码自己解决的办法

    本文将深入探讨Java乱码的根源,并提供一系列实用的解决方案,帮助开发者有效应对这一挑战。 ### Java乱码根源 Java乱码主要由编码不一致引起,具体来说,当数据在不同环境(如输入、存储、读取)中采用不同的字符...

    FORM表单中文乱码问题分析与解决

    FORM表单中文乱码问题分析与解决 在 Web 开发中,中文乱码问题是一个常见的问题,尤其是在FORM表单传递参数时。这个问题的根本原因是对中文的编码与解码方式不一致。我们可以理解为对中文的加密与解密的密钥不一致...

    Java中文乱码问题研究.pdf

    针对客户端和服务器端传输数据,客户端显示中文字符编码,及应用程序与数据库之间的数据交互等问题,分析了Java乱码产生的原因,并针对每种情况,结合实际的项目开发经验,给出了设置页面编码方式、修改Web服务器...

    Netty进制转换乱码问题

    在使用Netty进行TCP/IP通信时,我们可能会遇到数据进制转换导致的乱码问题。...通过仔细的调试和日志分析,可以有效地找出并解决这类问题。在实际项目中,理解并熟练掌握这些原理,将有助于构建健壮的网络应用程序。

    JAVA反编译文件解决中文乱码

    在Java开发过程中,有时我们需要查看或分析已编译的.class文件中的源代码,这就涉及到Java的反编译技术。反编译是将字节码还原为接近原生的源代码的过程,常用工具有JD-GUI,它是一款直观的Java反编译器。然而,当...

    java插入mysql中文乱码解决

    在使用Java应用程序与MySQL数据库交互的过程中,常常会遇到一个令人头疼的问题:中文字符在存储到数据库时出现乱码现象。这种现象通常发生在使用JDBC(Java Database Connectivity)连接数据库,并进行数据插入操作...

    javaweb乱码问题分析与解决.md

    #### 二、请求乱码分析与解决 ##### 1. 请求乱码概述 请求乱码通常指的是客户端提交的数据在服务器端接收时出现字符编码错误的情况。根据参数传输方式的不同,可将其分为两种类型:URL地址中的参数乱码以及请求体中...

    Java中文乱码解决之道

    阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都(更加包括我自己)没有一个清晰明了的认识,于是LZ想通过这系列博文(估计只有几篇)来彻底分析、解决java中文乱码问题,如有错误之处望各位同仁指出...

    JavaWeb开发中的中文乱码问题分析及解决方案.docx

    ### JavaWeb开发中的中文乱码问题分析及解决方案 #### 摘要 在JavaWeb开发过程中,中文乱码问题是常见的技术挑战之一。该问题源于不同组件间的编码方式不一致,尤其是在涉及用户输入、数据库交互以及页面展示等环节...

    文《关于c++与java中文乱码问题分析与解决》中一个bug分析1

    文章《关于C++与Java中文乱码问题分析与解决》深入探讨了这一问题,并提供了一个解决方案。该解决方案涉及到使用`iconv`库进行编码转换,从GBK(中国的GBK编码标准)转换到UTF-8(一种广泛支持的Unicode编码格式)。...

Global site tag (gtag.js) - Google Analytics