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

Java中文编码问题

 
阅读更多

1.不可避免的编码转换.

 

计算机只能保存和理解二进制字节,而文字实际上是一种图形,所以要使用一种编码方法将图形转换为对应的二进制字节.在Java中这种编码为Unicode,使用16个二进制位表示一个字符,包含基本所有语言的任何字符.

 

在中文Windows系统中默认使用GBK,而OSX中默认使用UTF-8.

 

 

各种环境中的文字编码可能是不同的,但是每种编码最终映射到的字符却是相同的.所以在各种环境之间交换文本时就需要转换编码.这种转换正确进行的前提是知道源文本的编码.这就好像读一段用英文写的文字,如果你不知道是用英文写的,而当做阿拉伯语去读,那结果肯定是一团糟.

 

 

 

2.Java中的编码转换.

 

使用Java从硬盘中读取一个文件,由于文件是自己的,那当然知道它是用什么编码写的.假设为GBK.

 

Java中有这样的API

 

Reader reader = new InputStreamReader(new FileInputStream("filename"),"GBK")

从上面一句代码可以看到,该API使用构造方法的第二个参数传入源文本使用的编码.之后在reader上调用的所有读方法,都会将读到的GBK字符转换为Unicode保存在内存中.

 

在写入文件时使用如下语句.

 

Writer writer = new OutputStremWriter(new FileOutputStream("filename"),"GBK")

 此时,在writer上调用写方法,会将内存中保存的Unicode转换为GBK写入文件.

 

若在上述两个语句中没有传入编码,则会默认使用当前操作系统的默认编码.

 

在Java中若要保证不出现乱码,只需要遵守读写文件编码一致的原则即可.

 

 

3.Tomcat中的文件编码

 

WEB服务器都要处理HTTP请求,但是如何知道一个HTTP请求所使用的编码呢?

 

首先构造HTTP请求时path部分只使用英文,不会有乱码问题.但是QueryString部分难免要使用非英文字符,在程序中我们可以使用UrlEncoder来进行编码.所以这部分的编码自己知道.

 

其次,在HTTP请求的HEAD中有个ContentType提供请求体所使用的编码信息.

 

 

在Tomcat中有两个参数用来配置解析请求时所使用的编码,如果均无设置,则默认使用iso-8859-1.

 

 

 

其中URIEncoding顾名思义,是Tomcat用来解析请求的Uri的编码,包括QueryString.

 

Tomcat会读取请求HEAD中的ContentType提供的编码信息解析请求体(在处理POST请求时很有用)

 

useBodyEncodingForURI这个参数表明是否需要使用请求头中的编码信息解析Url本身.

 

 

所以HTTP请求的url和请求体使用相同的编码,且HEAD中通过ContentType提供了正确的编码信息,那么只需要配置useBodyEncodingForURI="true"即可正确处理编码问题.

 

如果url和请求体所使用的编码不同(极不推荐的做法),那么需要正确配置URIEncoding参数.建议,如果服务器要处理HTTP GET请求一定要配置该参数.

 

由于使用的工具和方法不同,可能会生成一些不规范的HTTP请求,在HEAD中没有提供编码信息,所以需要设置一个默认编码,此时需要在HttpServletRequest对象上调用setCharacterEncoding("charset")告知服务器要使用的默认编码.

 

 

正确处理一个HTTP请求后,还要将响应以客户端能够接受的编码写回,可以调用HttpServletResponse对象的setCharacterEncoding("charset")来设置该编码.

分享到:
评论

相关推荐

    java中文乱码问题详解--- java中文乱码问题详解

    ### Java中文乱码问题详解 #### 一、中文问题的来源与背景 计算机技术发展初期,操作系统主要支持单字节的ASCII字符集。随着全球化进程加快和技术进步,为支持多种语言,尤其是双字节编码的语言(如中文),提出了...

    java中文乱码问题

    Java 中文乱码问题详解 Java 中文乱码问题是一个老生常谈的问题,特别是在 Web 应用中。今天,我们将从编码角度分析 Java 编译后在控制台和 Web 等终端显示乱码问题。 一、 Java 处理字符的原理 Java 使用 ...

    Java 中文乱码问题

    总结一下,Java中文乱码问题的解决主要依赖于以下几个关键点:正确设置源代码的编码、指定JVM的字符编码、理解并正确处理文件和网络通信的字符编码。通过细心的检查和配置,大部分乱码问题都能得到解决。同时,了解...

    java中文乱码问题解决

    "Java中文乱码问题解决" ...解决Java中文乱码问题需要了解编码的基本原理和各种编码格式的区别,并了解Java中常见的编码格式和应用场景。只有这样,才能更好地避免乱码问题,提高Java开发的效率和质量。

    java中文乱码问题处理方案.docx

    "java中文乱码问题处理方案" java 中文乱码问题处理方案是 java 开发者经常遇到的问题之一。这个问题的存在是由于 java 系统的中文问题原理没有被正确地理解和解决。只有当我们了解了 java 系统的中文问题原理,...

    Java中文乱码问题研究.pdf

    Java中文乱码问题研究 Java中文乱码问题是Java Web应用程序开发中常见的问题之一。...解决Java中文乱码问题需要了解Java语言的跨平台特性和编码机制,并结合实际的项目开发经验,选择合适的解决方法。

    java中文乱码解决问题

    JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的表单数据中有中文字符 在...

    Java中文编码问题研究.pdf

    Java中文编码问题研究 本文主要研究了Java中中文编码问题,探讨了Java SE序的运行原理,分析了Java单机程序、在服务器上运行JSP、Servlets或EJB等产生中文乱码的原因,并提出了相应的解决方案。 一、Java中文编码...

    java解决中文乱码问题

    Java 解决中文乱码问题 Java 中文乱码问题是中国程序员无法避免的话题。乱码的出现是由于中文和英文的编码格式不同,解码也是不一样...解决 Java 中文乱码问题的关键是选择合适的编码方式和正确地配置 Tomcat 和 JSP。

    java中文乱码大全

    Java中文乱码问题是编程者在开发Java应用程序时经常遇到的问题,尤其是涉及到中文字符处理时。这些问题产生的根本原因在于Java内部采用UNICODE编码,而不同的操作系统和浏览器可能支持不同的编码格式,如Windows中文...

    Java关于中文乱码问题的多种解决方法

    在Java编程中,中文乱码问题是一个常见的困扰,尤其是在处理文件读写、网络传输或数据库操作时。本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中...

    java中文乱码之解决URL中文乱码问题的方法

    总之,解决Java中的URL中文乱码问题需要理解URL编码的原理,并在客户端和服务器端采取相应的措施,确保编码和解码的一致性。无论是通过JavaScript编码、Java服务器端解码,还是调整服务器配置,关键在于确保字符集的...

    java中文乱码问题处理集锦

    ### Java中文乱码问题处理集锦 #### 一、引言 在Java开发过程中,中文乱码问题是开发者经常遇到的问题之一。特别是在处理不同编码格式的数据时,如从数据库读取数据、读写文件或者在网络传输过程中,很容易出现中文...

    Java中文乱码浅析及解决方案

    综上所述,解决Java中文乱码问题的关键在于确保整个程序的编码一致性,包括源代码、编译器、运行环境、文件读写、网络传输以及数据库操作等环节。通过细心配置和适当地指定编码,我们可以有效地避免乱码问题,确保...

    java中文乱码问题详解.pdf

    解决Java中文乱码问题的常见方法包括: - 设置Java程序启动时的系统属性`file.encoding`,确保与源文件和目标环境的编码一致。 - 使用支持指定编码的I/O流类,如`InputStreamReader`和`OutputStreamWriter`,显式...

    解决Linux操作系统下Java的中文乱码问题

    总结来说,解决Linux下Java中文乱码问题,关键在于确保编码一致性,包括JVM、源代码、文件读写、网络数据以及图形界面的字体设置。同时,使用统一且支持中文的编码,如UTF-8,可以有效避免乱码现象。

    JAVA 乱码问题集合

    在Java编程中,乱码问题是一个常见的困扰,尤其是在处理字符编码时。以下是一些关键的知识点,可以帮助理解和解决Java中的乱码问题。 首先,我们需要理解字符编码的基本概念。字符编码是用来表示文本的一种方式,...

    Java中文编码问题小结

    总之,Java中文编码问题涉及到多个层次,从JVM初始化到文件读写、XML解析,再到数据库交互,都需要对编码有清晰的理解和适当的配置,以确保中文字符的正确处理。开发者需要对这些细节有足够的了解,以便在遇到问题时...

    Java中文乱码解决之道

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

Global site tag (gtag.js) - Google Analytics