文章的内容是我通过看其他文章后摘抄和总结的,如有雷同,一定是抄的。
1 编码简介
1.1 ASCII/ISO-8859-1/Latin_1
单字节编码,可以表示256个不同的字符(英文字符、标点符号等)。
1.2 GB2312/GBK
双字节编码(不定长,英文时只用一个字节),兼容ISO-8859-1编码,即当其为ISO-8859-1时,只需用一个字节来表示,并且其值完全一样。GB2312只能表示简体字,GBK可以同时表示繁体字和简体字,并且兼容GB2312。
1.3 Unicode
定长双字节编码,不兼容任何编码,但可通过转换,表示任何编码。Java内部使用Unicode来进行操作。不过Unicode容易占用更多的空间,因为对于英文字母,Unicode也需要两个字节来表示。
1.4 UTF(UCS Transformation Format)
不定长编码,每一个字符的长度从1-6个字节不等,一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。其实UTF就是Unicode编码的传输和存储的格式。
2 Java对字符的处理
2.1 getBytes(charset)
将字符串所表示的字符按照charset编码,并以字节方式表示。注意字符串在java内存中总是按unicode编码存储的。比如"中文",存储为"4e2d 6587",如果charset为"gbk",则被编码为"d6d0 cec4",然后返回字节"d6 d0 ce c4"。如果charset为"utf8"则最后是"e4 b8 ad e6 96 87"。如果是"iso8859-1",则由于无法编码,最后返回 "3f 3f"(两个问号)。(应先考虑字符串所表示的字符编码,然后确定需转换的编码与现在字符串的编码是否兼容)
2.2 new String(charset)
将字节数组按照charset编码进行组合识别,最后转换为unicode存储。就是按照不同的编码,取不同的字节数,然后转换成unicode。
3 Java中各类型操作的字符处理
3.1 各类型处理
3.2 文件读写
外部数据如文件经过读写和转换两个步骤,转为jvm所使用字符。
1. InputStream/OutputStream用于读写原始外部数据,Reader/Writer执行读写和转换两个步骤,处理汉字不合适,应该首选使用Reader/Writer。
2. FileReader/FileWriter使用JVM当前编码读写文件.如果有其它编码格式,使用InputStreamReader/OutputStreamWriter
3. PrintStream有点特殊,它自动使用jvm缺省编码进行转换。
3.3 读取.properties文件
.propeties文件由Properties类以iso8859-1编码读取,因此不能在其中直接写汉字。
1. 使用JDK 的native2ascii工具转换汉字为\uXXXX格式。命令行:native2ascii –encoding GBK inputfile outputfile
2. 对读入的字符串进行转换:byte[] b = str.getBytest(“ISO-8859-1”); str = new String(b,”GBK”);
3.4 读取XML文件
XML文件读写同于文件读写,但应注意确保XML头中声明如<? xml version=”1.0” encoding=”gb2312”?>与文件编码保持一致。
3.5 WEB/Servlet/JSP
1. 对于JSP,确定头部加上 <%@ page contentType="text/html;charset=gbk"%>这样的标签。
2. 对于Servlet,确定 设置setContentType (“text/html; charset=gbk”),以上两条用于使得输出汉字没有问题。
3. 为输出HTML head中加一个 <meta http-equiv="Content-Type" content="text/html; charset=gbk"> ,让浏览器正确确定HTML编码。
4. 为Web应用加一个Filter,确保每个Request明确调用setCharacterEncoding方法,让输入汉字能够正确解析。
分享到:
相关推荐
### Java字符串的编码转换 在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理国际化应用时,理解并掌握各种字符编码格式变得尤为重要。下面将介绍几种常见的字符编码格式以及如何在Java中实现...
Java字符编码监听器是Java Web开发中的一个重要概念,主要用于处理HTTP请求和响应中的字符编码问题。在Java Servlet规范中,提供了`SetCharacterEncodingFilter`这样的过滤器,用于确保请求参数和响应内容的正确编码...
### Java 字符编码详解 #### 一、Java 字符编码基础概念 在深入探讨 Java 字符编码的问题之前,我们先来了解一下字符编码的基本概念。字符编码是计算机内部表示字符的一种方式,它涉及到如何将人类可读的文字转换...
本文将围绕“Java字符集编码简记”这一主题,深入探讨相关知识点,并结合标签“源码”和“工具”,探讨在实际开发中如何运用和处理字符编码问题。 首先,我们需要理解字符集的概念。字符集是一系列符号的集合,例如...
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。 ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),...
UTF-8(Unicode Transformation Format-8)是一种可变长度的字符编码格式,主要用于在网络中快速传输Unicode字符。UTF-8的基本原理是根据Unicode字符的范围,将其映射成不同长度的编码,具体规则如下: - 每个英文...
在Java编程语言中,字符编码是一个至关重要的概念,它涉及到如何表示、存储和处理文本数据。字符编码系统如ASCII、ISO-8859-1、Unicode(包括UTF-8、UTF-16等)被广泛使用。本教程将深入探讨Java中的字符编码,以及...
本篇将围绕"JAVA 转换字符编码工具"这个主题,深入探讨字符编码的概念、Java中的字符编码API以及`ReadFile.java`这个可能的源码文件如何处理字符编码。 首先,我们需要理解字符编码的基本概念。常见的字符编码有...
### Java字符编码问题详解 #### 一、引言 在Java开发过程中,字符编码问题是一个常见且容易引发各种隐藏问题的领域。不正确的字符编码处理可能导致数据丢失、乱码甚至是程序异常。本文将深入探讨Java中的字符编码...
### Java字符串编码转换详解 #### 一、Java 字符串编码转换基础 在Java中,字符串的处理是非常常见的操作之一,而字符编码是确保数据正确显示的关键因素。本篇文章将重点介绍Java中字符串编码的转换方法及其在Web...
Java中的字符编码转换是编程实践中一个至关重要的概念,尤其是在处理多语言环境和跨平台交互时。Java通过统一采用UTF-16编码格式在JVM内部处理字符,简化了字符操作的复杂性。UTF-16是一种变长的Unicode编码,它可以...
### Java字符编码错误整理大全 #### 一、概述 在Java开发过程中,字符编码问题是非常常见且容易引发一系列乱码问题的重要因素。本篇将详细梳理Java中的字符编码相关知识点,帮助开发者解决实际工作中遇到的各种...
在Java编程语言中,字符编码是一个至关重要的概念,它涉及到数据的存储、处理和传输。字符编码决定了如何将字符(如字母、数字、符号)转换为数字表示,以便计算机能够理解并操作它们。本篇文章将深入探讨Java中的...
字符编码检测和转换 附件中:FileEncodeDetector.java 此文件可以检测指定文件的编码格式 public static String getFileEncode(File file) {...} 附件中:FileCharsetConverter.java 此文件可以实现两个编码的相互...
Java字符编码系列三主要探讨了Java应用中遇到的编码问题,包括编码基础知识、Java与系统软件、URL、工具软件等方面的处理。文章通过“中文”二字举例,解释了不同编码方式如GB2312、Unicode、UTF-8的表示方法。 1. ...
### Java字符编码转换详细过程 #### 一、Java程序的生命周期与字符编码处理流程 Java程序的生命周期可以概括为三个主要阶段:编写源代码、编译源代码以及运行编译后的类文件。在这个过程中,涉及到多种字符编码的...
### 关于JAVA字符编码:Unicode, ISO-8859-1, GBK, UTF-8 编码及相互转换 在Java开发过程中,字符编码是处理文本数据的基础,不同的编码方式会影响数据的存储、传输以及显示。本文将详细介绍几种常见的字符编码...
通用的文件字符编码集判断需要借助第三方包cpdetector.jar 使用Cpdetector jar包检测文件编码需要依赖antlr-2.7.7.jar、chardet-1.0.jar、jargs-1.0.jar三个jar包 本下载资源一站式全包含,并附带亲测有效的片段...
Java字符编码是编程中至关重要的一个概念,尤其是在处理多语言数据时。本文主要探讨了Java中与字符编码相关的基础知识,包括ISO8859-1、GB2312、GBK、Unicode以及UTF编码。 首先,ISO8859-1是一种早期的单字节编码...