`
tangyanbo
  • 浏览: 268561 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA编码(中文转码)问题总结

 
阅读更多

本章主要分析Java编码和解码的原理,以及中文转码存在的问题做个简单的总结

目录

1 编码基础知识

ISO-8859-1编码

GBK

GB2312

UTF-8

2 WEB系统转换编码

原理

Servlet网络传输编码

Struts2 控制编码

Spring 控制编码

3 字符串转字节

4字节转字符串


1编码基础知识

ISO-8859-1编码

ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号

单字节,即一个字节对应一个编码,不能编码汉字

GB2312

能编码汉字,一个汉字用2个字节编码

GBK

1) 能编码汉字,一个汉字用2个字节编码

2) 编码的汉字比GB2312更多

UTF-8

1)能编码汉字,一个汉字用3个字节编码

2) 范围包含汉字,字母,特殊符号,gbk和utf-8之间是可以相互转换的


2 WEB系统转换编码

原理

我们以服务端和客户端的模式来做分析,例如,浏览器是客户端,web服务器是服务端。

这里有个编码和解码的过程,客户端端需要将字符串编码成字节,可以是iso-8859-1,utf-8,gbk等,默认为iso-8859-1,

且转换成字节的过程中不能丢失编码。服务端需要用发送端同样的编码方式进行解码,否则将出现乱码。

一般由服务端确定一种编码和解码的方式,然后告知客户端编码和解码的方式。

Servlet 网络传输编码

接收浏览器POST请求

以JSP为例,服务端将JSP生成HTML发送给客户端。

设置浏览器编码和解码方式为UTF-8

例如:

<%@ page pageEncoding="utf-8" contentType="text/html; charset=utf-8" language="java"%>

服务端解码方式1:

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

服务端解码方式2:

request.setCharacterEncoding("UTF-8");

接收浏览器GET请求

如:http://localhost:8888/webtest/EncodeServlet?name=你好

浏览器将会对url进行urlEncode,编码方式为UTF-8

服务端解码方式:

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

此处用request.setCharacterEncoding("UTF-8");来设置解码,不能奏效,原因是get请求将参数拼在url后面进行url encode,而web容器对url的解码是在调用servlet之前,且默认解码方式是iso-8859-1

响应给浏览器

Response设置编码:

Response是指响应给客户端时,字节的编码方式,默认为ISO-8859-1

可用如下方法查看:

response.getCharacterEncoding();

设置响应流的编码方式:

response.setCharacterEncoding("UTF-8");

设置浏览器的编码和解码方式:

response.setContentType("text/html;charset=UTF-8");

jsp设置:

<%@ page pageEncoding="utf-8" contentType="text/html; charset=utf-8" language="java"%>

pageEncoding:设置jsp文件存储编码

contentType里面的charset:设置浏览器端传输的编码和解码

解析响应时解码,发送请求时编码

要保持响应流和编码和浏览器解码方式一致,才能不乱码


HTTPClient设置编码


Struts2控制编码

Struts.xml中做如下配置:

<constant name="struts.i18n.encoding" value="utf-8"></constant>

Spring控制编码

Web.xml中配置如下:

<filter>
<filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

其中encoding设置服务端编码和解码的方式

forceEncoding表示强制编码的方式


3 字符串转字节转码

String s = "s汉";
byte[] bytes1 = s.getBytes("ISO-8859-1");//丢失字符
byte[] bytes2 = s.getBytes("GBK");
byte[] bytes3 = s.getBytes("UTF-8");


4 字节转字符串

String s1 = new String(bytes1,"utf-8");//丢失
String s2 = new String(bytes2,"GBK");
String s3 = new String(bytes3,"utf-8");
















分享到:
评论
1 楼 海云台119 2016-11-19  
分析不错,最后的例子也充分说明
“要保持响应流和编码和浏览器解码方式一致,才能不乱码”
的要害!
我说三点
1.例子说的丢失原因:汉字在其他欧洲语言编码没有对应的符号(也没有必要有)
2.其实涉及到文件的编码转为自己想要编码方式的实现,因为转码到utf涉及到unicode(公厕 )字典
3.GBK的英文是不会乱码的,因为所有的编码都基于ASCII(美国标准脸)

相关推荐

    java视频上传,转码

    在Java开发中,视频上传、转码、截图和播放是常见的功能需求,尤其在构建多媒体应用或者在线视频平台时。以下是对这些知识点的详细说明: 1. **Java视频上传**: - **文件I/O操作**:Java中的`java.io`包提供了...

    java的api中文转码示例

    总结来说,Java API提供了丰富的工具来处理中文字符的编码问题,包括URL编码和Base64编码。理解并正确使用这些工具对于处理中文字符在不同环境下的传输和存储至关重要。在实际开发中,一定要注意字符集的选择,以...

    ascii编码转码工具

    总的来说,"ASCII编码转码工具"是处理字符编码问题的一个实用工具,尤其在Struts框架下进行国际化开发时,它能够帮助开发者解决因编码差异带来的问题,提高开发效率。同时,深入理解字符编码和转码原理也是每个IT...

    java转码工具类

    ### Java转码工具类知识点详解 #### 一、概述 在Java开发中,经常会遇到不同编码格式的文件处理问题,特别是在处理国际化应用时,字符集的兼容性尤为重要。本篇文章介绍了一个Java批量转换文件编码的工具类——`...

    yuv常用的几个转码方法,java编码

    YV12,NV21,I420,YUV常用的几个转码方法,java编码。。。。

    汉字转码功能

    汉字转码是计算机处理汉字时的一个重要环节,特别是在不同的字符编码体系之间进行转换时。汉字在计算机中的表示方式多种多样,常见的有GBK、GB2312、UTF-8、Unicode等编码格式。这些编码方式各有特点,适用于不同的...

    java转码

    在Java编程语言中,"转码"通常指的是字符编码转换,这是处理文本数据时非常重要的一个环节。字符编码决定了字符如何在计算机内部表示,常见的编码有ASCII、GBK、UTF-8等。不同的编码格式适用于不同的场景,因此在...

    java转码工具

    Java转码工具是一种基于Java语言开发的实用程序...总的来说,Java转码工具是处理编码问题的有效工具,尤其对于处理中文字符集的转换,它可以帮助开发者和普通用户在不同编码格式间轻松转换,确保数据的准确性和一致性。

    汉字转码实例

    总结来说,汉字转码是中文信息处理的重要环节,理解并掌握各种编码格式及其转换方法,对于进行跨平台、跨系统的数据处理具有重要意义。通过“GetCodeDemo”这个程序,你可以进一步了解和实践汉字转码的具体步骤和...

    URL编码转码工具

    这是一个URL编码转码工具,具体的功能和演示不发了。 实际功能是把网址转换为%hex 的形式。 1. 这个曾经是安全领域涉及到SQL注入破解屏蔽字符串的方法之一,但是现在已经很少用了 2. 这曾经是入侵大型网站(特别是...

    Java 程序转码(UTF-8)

    本文通过对给定示例代码的分析,展示了如何在Java程序中实现从UTF-8到GBK或其他编码的转换,同时也指出了示例代码中存在的问题,并给出了相应的修改建议。 #### 五、参考资料 1. **Oracle官方文档**:[Character ...

    java读写excel包括utf8转码为可识别汉字gbk

    java读写excel包括utf8转码为可识别汉字gbk,jxl方式读取excel,生成一个新的excel

    java+ffmpeg视频、音频转码

    Java结合FFmpeg进行视频和音频转码是一种常见的技术实践,特别是在多媒体处理和流媒体服务中。FFmpeg是一款强大的跨平台命令行工具,用于处理各种音视频格式,包括转码、剪辑、合并等操作。而Java则提供了一个稳定的...

    MD5编码后转码,转码汉字一致.txt

    针对c#或者java,其他编程语言,对中文汉字加密出现了密文不一致问题进行修复。增加编码类型,自定义编码类型

    JAVA 视频转码FLV

    同时,由于版权和性能问题,可能需要对转码过程进行适当的优化,例如动态调整编码参数,以平衡质量与文件大小的关系。 综上所述,JAVA实现的视频转码到FLV及截图功能,涉及到了多媒体处理的核心技术,包括视频编码...

    java 工具包 h264转码MP4 支持html5播放格式

    h264转码MP4 支持html5播放格式 示例代码: H264TrackImpl h264TrackImpl = new H264TrackImpl(new FileDataSourceImpl("C://a.264")); Movie movie = new Movie(); movie.addTrack(h264TrackImpl); Container ...

    某编码的文本文件批量转码为UTF8工具及java代码

    比如说我想把用GBK编码的/home/user/uchome目录下的文件全部转码为UTF8,转码之后的文件存储在/home/user/uchome2,那么命令为 java -jar "encoding.jar" /home/user/uchome /home/user/uchome2 GBK

    java字符串编码转换

    ### Java字符串编码转换详解 #### 一、Java 字符串编码转换基础 在Java中,字符串的处理是非常常见的操作之一,而字符编码是确保数据正确显示的关键因素。本篇文章将重点介绍Java中字符串编码的转换方法及其在Web...

    java转码代码

    在Java编程语言中,"转码"通常是指在不同字符编码之间进行转换的过程,以解决乱码问题。乱码是由于文件或数据流在处理时使用了错误的字符集导致的。在这个场景下,"java转码代码"指的是用于解决Java程序中遇到的乱码...

    Java上传视频和转码的编程思路

    【Java上传视频和转码的编程思路】 在Java中实现视频上传、转码和播放功能,需要考虑以下几个关键点: 1. **视频上传**: - 用户通过网页上传视频文件时,HTML表单的`enctype`属性应设置为`multipart/form-data`...

Global site tag (gtag.js) - Google Analytics