想弄清楚编码的转化问题,查了好多帖子都不太能理解,特来求助首先对于这一句
String s2= new String(s1.getBytes( "iso-8859-1"), "gb18030");最开始从别的帖子的说明,结合JDK的说明
我理解为 将字符串s1按照 iso-8859-1重新编码为字节数组 , 将这个字节数组以gb18030的方式重新存为s2
按照这么理解的话我就开始不明白了....
1 getBytes方法怎么知道s1原来以什么编码方式存储的,怎么做到将未知编码方式的s1重新编码为iso-8859-1的Byte[]的
2 对于构造函数String(Byte[] b, String charSetName )
他怎么将各种不同编码的Byte[] 重新转储为 gb18030的Byte[]的然后又看到了另一个说法
1 getBytes("iso-8859-1") 代表 原来的获取的s1以iso-8859-1编码方式存放在内存中(原始的字节码是iso-8859-1编码)
然后按照这个编码方式转化为 unicode的字节码2 String(Byte[] b, String charSetName ) 将原来是unicode字节码的Byte[] b ,转存为 charSetName编码的字节码但是这又和JDK说明
Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array.
的不一样
感觉还是不对我觉得是不是我在String的存储方式的理解出错了
求解答,感激不尽
String s2= new String(s1.getBytes( "iso-8859-1"), "gb18030");最开始从别的帖子的说明,结合JDK的说明
我理解为 将字符串s1按照 iso-8859-1重新编码为字节数组 , 将这个字节数组以gb18030的方式重新存为s2
按照这么理解的话我就开始不明白了....
1 getBytes方法怎么知道s1原来以什么编码方式存储的,怎么做到将未知编码方式的s1重新编码为iso-8859-1的Byte[]的
2 对于构造函数String(Byte[] b, String charSetName )
他怎么将各种不同编码的Byte[] 重新转储为 gb18030的Byte[]的然后又看到了另一个说法
1 getBytes("iso-8859-1") 代表 原来的获取的s1以iso-8859-1编码方式存放在内存中(原始的字节码是iso-8859-1编码)
然后按照这个编码方式转化为 unicode的字节码2 String(Byte[] b, String charSetName ) 将原来是unicode字节码的Byte[] b ,转存为 charSetName编码的字节码但是这又和JDK说明
Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array.
的不一样
感觉还是不对我觉得是不是我在String的存储方式的理解出错了
求解答,感激不尽
解决方案 »
- 项目发布时出现的错误~~
- Spring 多数据源错误
- JSF中<f:subview>子页面中的commandLink不能跳转到新的页面,怎么解决?
- jstl能否在weblogic中使用?
- sql server2000 jdbc连接问题~大家帮忙!
- 我把txt文件中的数据到入数据库总是报错,可能是数组越界,该怎么解决?
- 请问如何在JSP中取得当前页面所在的网站的网址和端口?
- 寻找功能强大,外面好看 jsp论坛
- 向Struts 高手们请教!
- oralce怎样导出表的insert语句????????????????????????????????????????????????????????????
- 在线等 求解 mybatis 动态sql语句 choose和if 一起用时,为什么只执行otherwise里面的Sql语句 求解
- 求问一个jsp小问题?
S1按ISO解码再按GB编码,肯定会出乱码。
这句话意思是先用iso-8859-1形式编码,然后再用gb18030解码。
在java内部,吧string变成byte是编码过程,吧byte变成string是解码过程,java的内部字符编码都是utf-8的双字节变种(utf-8编码本身是三字节的)。
而iso-8859-1其实是单字节原始编码,所以这句话根本含义其实是吧字符串还原成单字节原始码,然后再用gb18030的形式解码,在以前ie6的时候,浏览器提交中文,会使用gbk的形式编码传输,但是tomcat默认使用iso-8859-1完成解码,因此可以使用这句话用来解码,但是现在不用这样了,这个工作可以交给容器去完成的。
你这是在误人子弟!
UTF-8 是变长码,每个字符字节数1到3都可能。java String 使用 UTF-16 的一个版本。
字符和字节的关系,看JDK的CodePoint 类,里面有简单介绍,以及衍生阅读材料的链接。
编码问题实际相当复杂,不是一两句说的清的。网上很多BLOG的说法都有这样那样的错误。
建议直接阅读http://www.unicode.org/ 官网上的标准。
你说编码很复杂,确实很复杂,我也知道一两句说不清楚,但是最主要的是,能解决眼下楼主的问题,而且我也是依靠我的理解解决问题的,而且问题解决了。
最后说一句,我不教书育人,所以误人子弟这个大帽子,我还是担不起的,更何况牛顿用他的经典物理学误人子弟了几百年,谁也不能保证现在的相对论与量子力学不是误人子弟,所以谁的说法都会有错误,问题是你要说出你的观点,然后给个解决楼主问题更好方案。