总结:servlet 当路径中有%%的时候 会自动进行url解码。具体请看我的工作日志
utf8, gbk, iso8859-1编码
1. sData.getBytes();和sData.getBytes("gbk")作用是一样(如果你是中文系统的话)
因为中文系统内码(即默认编码)一般是GBK。而getBytes()的意思是把串生成某个编码的字节流,并转换成byte数组。
2.sData
= new String(sData.getBytes("iso8859-1"), "gbk");
这句的意思是告诉
java,请把它生成ISO-8859-1编码的字节流数组,在new
String的时候传入GBK这个参数,告诉编译器这个byte数组其实是以gbk编码的,这样new
String的时候编译器就可以正确的把它转换成Unicode了,因为java中string是unicode编码的
3.sData =
new String(sData.getBytes("gbk"), "UTF8");
为什么这样写不对呢?先说new
String(sData.getBytes("iso8859-1"),
"gbk");。先看你把文件内容读到String中的时候,你需要告诉Java把你文件内容看作是ISO-8859-1编码的(其实是GBK或Unicode或其他),而因为ISO-8859-1是一个字节的,所以读文件内容并转换为sData的时候,java只是把每个字节前加
0x00组成unicode,所以后来当用这句sData.getBytes("iso8859-1")都可以解析出原来的字节,就是说信息不会丢失,因为只是把0x00去掉而已。(这个过程就好象加密解密)但是注意这串字节流实际上不是ISO-8859-1的(但java并不知道)。
而GBK是1-2字节的,如果你文件是UTF-8(1-6字节),那么你告诉java这个文件内容是GBK的,java就以GBK编码去读入这串字节流,但是这里会发生信息丢失或错乱,因为这个字节流并不是GBK的,而是UTF-8的,然后再用new
String(sData.getBytes("gbk"), "UTF8");显然就恢复不了了。
你可以做个试验保存个GBK的文件,用UTF-8去读,然后new String(sData.getBytes("UTF-8"),
"GBK");也肯定是不行的。所以只有ISO-8859-1才可以这么做
GBK和Unicode都兼容ISO-8859-1,但这并不是 new String(sData.getBytes("iso8859-1"),
"gbk");可以运行的原因。因为在从文件读入的时候,其实就已经按ISO-8859-1编码读入那些中文了,ISO-8859-1并不兼容GBK,所以按兼容来解释的话,那么这里就应该已经出错了。但是事实上并没有出错,但是因为ISO-8859-1是单个字节的,它把每个字节认作一个字符读入,这样不会丢失信息。
也就是说比如:你的文件内容是“hello你好"那么java以ISO-8859-1读入的时候,会认为这里有9个字符,然后转换为Unicode(String是unicode的),还是9个字符但是就变成18个字节了。
然后用sData.getBytes("ISO-8859-1"),还是可以恢复成原来的摸样,仍然是9个字节。
这样字节信息没有丢失,于是就可以顺利的以GBK解析并把它转换成java中的String。
分享到:
相关推荐
Java 程序转码(UTF-8)Java 据考察,简单易用、。
令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,ANSI)收到的数据将utf-8转码成ansi也是乱码。 因为不太熟悉java语言,还曾经怀疑是不是Delphi的utf-8编码和java语言的不...
基于MFC CString的GBK与UTF-8编码转换,在网上找到一些代码都有问题,但都存在一些错误。现在改好了,与大家分享一下。 (MFC 非UNICODE)
GBK、UTF-8批量文件3秒快速转码工具(支持GBK,UTF-8免费转换),UTF-8/GBK编码在线转换工具,压缩包可以有多目录与文件,如目录中有图片不会转码,但是会随转码好的文件一起打包下载。 使用帮助 . 上传压缩包(仅支持zip...
C++ 实现unicode到utf-8的转码 ,只是Unicode转utf-8 例如:\u300a\u58eb\u5175\u7a81\u51fb\u300b 翻译为《士兵突击》
delphi操作utf-8转码HTTPEncode
身份证读卡器生成的基本信息TEXT文件,由于是采用 GB 13000 的 UCS-2 编码格式,java读取出来是乱码,这个段代码就是解决转码问题的,亲测可用
一个页面将转码工具中文转-utf-8之间相互转换!
PB的utf-8转换,包括加码解码等等 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
可以将你输入的路径下的,java进行转码,转为utf-8,使用方法:输入要转码的路径,输入保存在哪里的路径 ,即可
批量文件转码工具(支持 GBK,UTF-8 转换)。 批量文件转码工具,支持GBK,UTF-8转换,window下面使用,亲测可以使用!!!!!!!!!! 批量 文件转码 工具 GBK UTF-8
字符编码转换的工具(根据3GPP 03.38,11.11附录等协议),可以把字符转换成ascii,8 bit,7 bit,UCS2,UTF-8编码。 在做手机软件开发的时候,调试WMS,Phone book,STK等模块可能会用的到。
unicode -> utf-8 utf-8 -> unicode 国际化必备工具
Discuz_X3.1_SC_GBK源码+ utf-8转码工具 可以转化成其他版本
utf-8 互转 gb2312 转码 支持中文汉字 可以直接输入 转码
老项目采用GBK编码格式,而新项目采用的UTF-8编码格式,如果直接把Java源代码复制到Eclipse中所有的中文信息会出现乱码。所以写了个小的方法类,将java文件的编码格式从GBK转UTF-8
当时在linux上写的代码,转到window下就全部是,自己写的一个小工具类,可以实现UTF-8与GBK之间相互转码。程序开发完后,指定路径,可以实现将文件的编码装换成自己想要的格式,里面有注释
String转utf-8,http链接转utf-8
工具是网上淘的,不是自己写的。写js音乐播放器的时候用到的工具,从网上下下来的.lrc格式的文件,用的时候是乱码,用法非常简单,将lrc文件拖动到这个工具上就行,它会弹出一段话意思就是成功了,这时候你用的时候...
比较方便使用的java web开发转码小助手。 说明: 1,UTF-8转ASCII,即中转英使用; 2,逆转时,直接用js可做到(本人很少用,略);