- 浏览: 484535 次
- 性别:
- 来自: 沈阳
文章分类
- 全部博客 (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 421今天中午,我突然想搞清楚 Unicode 和 UTF-8 之 ... -
【转】HTTP协议及浏览器编码行为
2012-12-19 13:48 1339转自:http://blog.csdn.net/hap ... -
【转】JSP中request.getParameter()乱码问题
2012-09-11 14:12 3082第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特 ... -
【转】说说字符集和编码
2012-09-10 22:41 767很久很久以前,有一 ... -
【转】解决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 1463当我们编写一个txt文件或jsp页面时,我们用默认的一种编码区 ... -
【转】有关保存文件时的编码选项与html/jsp页面设定字符编码的配置
2012-08-27 16:10 742分两种情况介绍 注:首先,各位得对一次 请求/响应 的 ... -
【转】内码转换技术
2012-08-27 16:04 0内码转换技术 好吧 ... -
【转】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
2012-08-27 13:25 933这两天抽时间又总结/整理了一下各种编码的实际编码方式, ... -
【转】又一篇介绍计算机字符编码的好文——计算机中的字是如何处理的?
2012-08-26 21:50 0如果你用放大镜看一下,可以看出屏幕上的字是由一个一个的像素点组 ... -
【转】利用javascript完成URLEncoding功能
2012-08-27 11:25 722日常开发中,经常遇到由于页面不一致,导致由页面表单提交或超连接 ... -
【转】Java编码规范,在您进行编码之前应该阅读的规范
2012-08-27 11:25 798本文转载于:http://www.web3d.com. ... -
【转】第三篇:JAVA字符编码系列三:Java应用中的编码问题
2012-08-26 21:42 774这部分采用重用机制,引用一篇文章来完整本部分目标。 来源 ... -
【转】java 与 iso-8859-1 编码
2012-08-26 21:16 1488今天又研究了一下字符编码。写了些测试代码,算是比较了解了。 主 ... -
【转】form表单提交数据编码方式及tomcat的接受编码方式
2012-08-26 21:15 1554form有2中方法把数据提交给服务器,get和post,分别说 ... -
【转】TOMCAT中文问题,解决(全)(转载)
2012-09-11 14:30 659TOMCAT中文问题解决了.其他应用服务器的问题也可以 ...
相关推荐
JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
iso-8859-1转GBK,GBK转iso-8859-1,在二维码生成过程中如果没有用UTF8编码可以使用编码转换方式解决乱码问题
C语言字符编码转换UNICODE、GBK、UTF-8互相转换
字符串编码转换方法,字符串输出对应的ASCII编码,ISO-8859-1编码,GBK编码等编码。字符串编码转换方法,字符串输出对应的ASCII编码,ISO-8859-1编码,GBK编码等编码。字符串编码转换方法,字符串输出对应的ASCII...
各种字符集编码表,包括iso-8859-1,gbk,gb18030, unicode,以及字符集的转换说明(主要是Java国际化的一些字符集转化说明)
Java工程编码格式由GBK转化成utf-8(编码格式互转) https://ymjin.blog.csdn.net/article/details/118769530
字符编码笔记:ASCII-Unicode和UTF-8 字符编码笔记:ASCII-Unicode和UTF-8 字符编码笔记:ASCII-Unicode和UTF-8
idea、Eclipse等项目导入.java文件中文乱码完美解决方案:文件夹下所有GBK编码的.java一键转为utf-8,操作方式:将GBK2UTF8.jar文件考到需要转码项目目录,在当前位置运行控制台,输入命令java -jar GBK2UTF8.jar,...
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换。
Qt字符转换,串口接收数据转为中文显示可用。Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值
在eclispe的项目中,有存在项目字符集和工作空间字符集不匹配,该jar只能将项目文件中的.java结尾的文件转为utf8编码,并且源文件必须为gbk编码的,否则乱码
1、xml不需要转换,因为xml默认是utf-8,在你新建的时候已经是正确的格式了 2、图片更不需要转换 3、bin目录,gen目录的直接忽略 4.只需要src目录的代码转换,请确保里面的代码都是同一种格式,这样的才可以转换 ...
将UNICODE字符集与UTF-8字符集相互转换
用于常用编码转换,包括BREW、JAVA等语言UNICODE字符串定义格式,网页编码,GBK及UTF-8的URL编码等
Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8
unicode,gbk,utf-8等编码方式的介绍,简单举例,资料为网上收集整理。
unicode -> utf-8 utf-8 -> unicode 国际化必备工具
ASCII、Unicode、GBK和UTF-8字符编码的区别联系