- 浏览: 502710 次
- 性别:
- 来自: 沈阳
文章分类
- 全部博客 (437)
- Windows设置 (2)
- oracle数据库 (39)
- bug--jsp (4)
- j2se (13)
- js (40)
- bug-tomcat不能启动程序 (1)
- Hibernate (29)
- eclipse (20)
- java (65)
- 设计模式 (6)
- bug (18)
- PL/SQL (11)
- 前台 (5)
- 杂谈 (25)
- UML (1)
- jdbc编程 (2)
- 技术调研 (1)
- 数据通信 (2)
- ios (1)
- servlet自学笔记 (10)
- tomcat (9)
- SQL学习笔记 (6)
- java工具 (1)
- 数据库设计 (4)
- javascript (10)
- jsp (11)
- struts (17)
- ajax (7)
- linix/Unix (6)
- 资源 (3)
- spring (14)
- 算法 (5)
- 计算机网络 (2)
- http (5)
- c++ (2)
- web应用 (3)
- jvm (5)
- java中的字符编码 (14)
- java代码库 (2)
- classloader (1)
- 读书笔记 (1)
- c (1)
- 开源软件 (1)
- svn (1)
- AOP (1)
- java序列化 (1)
- 多线程 (4)
- The legendary programmers (1)
- Apache http Server (1)
- html tag (3)
- struts1.X学习笔记 (5)
- buffalo (1)
- 自己收藏 (0)
- TOEFL(IBT) (1)
- 网络翻墙 (0)
- 编译原理 (1)
- 书籍推荐 (1)
- css (10)
- javaee环境搭建资料 (1)
- 开源工具 (1)
- 美国生活 (1)
- spring自学 (3)
- log4j (3)
- 算法与数据结构 (5)
- 病毒,插件处理大全 (1)
- flex (2)
- webservice (1)
- git (7)
- cs (1)
- html (4)
- javaee (6)
- 开车 (0)
- springmvc (3)
- 互联网架构 (2)
- intellij idea (18)
- maven (15)
- mongodb (2)
- nginx (1)
- react (3)
- java基础例子 (2)
- springboot (2)
- 培训 (5)
- mysql (3)
- 数据库 (3)
- 生活 (2)
- intellij (3)
- linux (2)
- os (3)
最新评论
-
潇洒天涯:
[color=blue][color=cyan] ...
oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 -
hekai1990:
受教了..
oracle中的varchar2
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与各编码之间的交叉转换(编码不变,bit流不变,只是按照读出的字符集不同)
在上面直接转换中,由字符串(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,这样无论用哪种编码构造时都会产生一个?乱码。(内码转换的中间表是1:2的关系)
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涓枃。
发表评论
-
【转】字符编码笔记:ASCII,Unicode 和 UTF-8
2017-12-12 19:09 449今天中午,我突然想搞清楚 Unicode 和 UTF-8 之 ... -
【转】HTTP协议及浏览器编码行为
2012-12-19 13:48 1392转自:http://blog.csdn.net/hap ... -
【转】JSP中request.getParameter()乱码问题
2012-09-11 14:12 3120第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特 ... -
【转】说说字符集和编码
2012-09-10 22:41 784很久很久以前,有一 ... -
【转】解决get方法传递URL参数中文乱码问题
2012-08-27 22:18 0来自:http://www.javaeye.com/top ... -
判断一个文本文件的编码格式
2012-08-27 17:40 0文件的字符集在Windows下有两种,一种是ANSI,一 ... -
【转】为什么用记事本保存的UTF-8格式的java文件不能编译通过?
2012-08-27 17:26 0Windows记事本默认保存的ANSI格式,java编 ... -
Eclipse中的Text File Encoding与文本文件的编码的关系
2012-08-27 17:25 1486当我们编写一个txt文件或jsp页面时,我们用默认的一种编码区 ... -
【转】有关保存文件时的编码选项与html/jsp页面设定字符编码的配置
2012-08-27 16:10 759分两种情况介绍 注:首先,各位得对一次 请求/响应 的 ... -
【转】内码转换技术
2012-08-27 16:04 0内码转换技术 好吧 ... -
【转】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
2012-08-27 13:25 956这两天抽时间又总结/整理了一下各种编码的实际编码方式, ... -
【转】又一篇介绍计算机字符编码的好文——计算机中的字是如何处理的?
2012-08-26 21:50 0如果你用放大镜看一下,可以看出屏幕上的字是由一个一个的像素点组 ... -
【转】利用javascript完成URLEncoding功能
2012-08-27 11:25 747日常开发中,经常遇到由于页面不一致,导致由页面表单提交或超连接 ... -
【转】Java编码规范,在您进行编码之前应该阅读的规范
2012-08-27 11:25 821本文转载于:http://www.web3d.com. ... -
【转】第三篇:JAVA字符编码系列三:Java应用中的编码问题
2012-08-26 21:42 804这部分采用重用机制,引用一篇文章来完整本部分目标。 来源 ... -
【转】java 与 iso-8859-1 编码
2012-08-26 21:16 1544今天又研究了一下字符编码。写了些测试代码,算是比较了解了。 主 ... -
【转】form表单提交数据编码方式及tomcat的接受编码方式
2012-08-26 21:15 1583form有2中方法把数据提交给服务器,get和post,分别说 ... -
【转】TOMCAT中文问题,解决(全)(转载)
2012-09-11 14:30 690TOMCAT中文问题解决了.其他应用服务器的问题也可以 ...
相关推荐
字符编码标准之GBK、GB2312、UTF-8和ISO-8859-1的比较 字符编码标准是计算机领域中的一项基本技术,用于将文字或符号转换为计算机能够识别的二进制代码。常见的字符编码标准有GBK、GB2312、UTF-8和ISO-8859-1等,...
首先,我们了解基本的字符编码体系,如ASCII、ISO-8859-1和Unicode。ASCII是最基础的7位编码,可表示128个不同的字符,主要针对英语字符。ISO-8859-1是8位编码,支持更多的西欧字符。而Unicode则是一个广泛采用的...
1. 源代码编码:Java源代码默认使用的是UTF-8编码,但开发者可以通过在文件头部添加`/* -*- coding: XXX -*- */`注释来指定不同的编码方式。然而,如果不一致,可能会导致编译时出现乱码问题。 2. 字符串字面量编码...
在Java中,字符编码涉及到字符集(Charset)的概念,如ASCII、ISO-8859-1、GBK、UTF-8等,每种都有其特定的用途和适用场景。 【标签】:“源码”提示我们可能涉及到了Java代码的编写和理解,编码规范、注释、异常...
这个问题主要源于Source Insight对非ASCII字符的处理机制,它可能期望的是其他字符集,如GBK或ISO-8859-1。 解决这个问题的方法通常包括以下步骤: 1. **配置Source Insight的编码设置**:进入Source Insight的...
然后是扩展的8位编码,如ISO-8859-1,以及针对中文的GBK编码等。 2. **Unicode与UTF-8**:Unicode是一个统一的字符集,包含了世界上几乎所有的文字。而UTF-8是Unicode的一个实现,它使用变长字节编码,广泛应用于...
文件编码决定了文件中字符的二进制表示,常见的编码有ASCII、ISO-8859-1、GBK、GB2312以及Unicode家族的UTF-8、UTF-16等。其中,UTF-8是最广泛使用的编码,支持全球大部分语言;GBK是中国大陆常用的一种多字节编码,...
常见的字符编码有ASCII、ISO-8859-1、GB2312、GBK、GB18030以及Unicode(包括UTF-8、UTF-16等)。在Java中,默认的字符编码是平台相关的,通常在Windows上是GBK,在Unix或Linux系统中可能是UTF-8。 当读取一个文本...
在实际应用中,你可能需要根据文件的实际情况调整检测策略,例如增加对GBK、ISO-8859-1等常见编码的支持。同时,对于大型项目,使用成熟的第三方库如`cpdetector`通常更为可靠,因为它已经经过了广泛的测试和优化。...
通常,当我们从网站下载或抓取数据时,文件的编码可能会有所不同,如UTF-8、GBK、ISO-8859-1等,因此,自动识别正确的编码对于正确解析和显示文本至关重要。 首先,我们需要理解字符编码的基本概念。字符编码是一种...
不同的语言字符集有着不同的编码标准,常见的编码包括big5、gbk、gb2312、utf8、Shift_JIS、iso8859-1等。为了确保网页能够正确地展示各种语言,就需要一种有效的编码切换解决方案。 首先,Web服务器发送给客户端的...
例如,如果数据库使用的是ISO 8859-1,那么Java程序需要将输入输出流的编码设置为"ISO-8859-1"。这可以通过`java.nio.charset.Charset`类和`java.io.InputStreamReader`、`java.io.OutputStreamWriter`等类来实现。 ...
常见的字符编码有ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16等。其中,ASCII是最基础的编码,只能表示128个基本拉丁字符;而UTF-8是一种变长编码,能表示Unicode字符集中的所有字符,且在Web应用中最为常见。 ...
如果文件不是以UTF-8编码的,而代码中假设它是,那么可能会出现乱码。此时,批量转换工具就显得尤为必要,它可以确保文件以Java期望的格式读取或写入。 批量转换过程可能涉及以下步骤: 1. **扫描目录**:程序首先...
#### 一、从ASCII到Unicode (UTF-8) 在探讨Struts框架及其应用场景之前,首先需要理解字符编码的基本概念,特别是从ASCII到Unicode的发展历程,这对于避免读写数据库时出现乱码问题至关重要。 ##### 1. ASCII与...
jchardet基于统计模型,能够识别出Unicode的各种变体和其他多种编码方式,如ISO-8859系列、EUC系列、Shift_JIS、GBK等。 **使用cpdetector读取文件编码步骤:** 1. **添加依赖**:首先,你需要将cpdetector的jar包...
- **字符编码**:JAVA源代码使用Unicode编码,支持ASCII、ISO8859-1、GBK/GB2312和UTF系列等多种编码。 - **变量**:存储数据,包括声明、赋值和变量分类(局部变量、成员变量)。 - **类型转换**:包括自动类型...
常见的字符编码包括ASCII、ISO-8859-1、GB2312/GBK/GB18030、Unicode等。其中,Unicode旨在统一所有文字编码,并有几种实现方式,如UTF-8、UTF-16和UTF-32。UTF-8编码因节省空间而被广泛使用。 变量是存储数据的...
在示例程序中,展示了将中文字符串转化为Unicode、GBK和UTF-8编码的字节数组的过程。Unicode编码的字节数组以BOM(Byte Order Mark)开始,即0xFE 0xFF,这是Unicode的标志。GBK编码的字节数组通常比UTF-8短,因为它...
1. **Ant默认编码设置**:早期版本的Ant可能默认使用的是非UTF-8的编码,例如ISO-8859-1,这在处理中文字符时会出现问题。用户可以通过配置`<project>`标签中的`defaultencoding`属性,将其更改为UTF-8来解决。 2. ...