java 中编码解码问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中编码解码问题相关的知识,希望对你有一定的参考价值。
(1)问题一:
String Str = "中文123";
byte[] bytes = Str.getBytes("ISO8859-1");//字符串先用ISO8859-1编码
String mm = new String(bytes,"ISO8859-1");//字符串再用ISO8859-1解码
结果是"??123" 疑问:用同一种方式解码为什么会出现乱码呢?
(2)问题二:
从网页上看到这样的一句话:“iso-8859-1 只是单字节字符集中最简单的一种,也就是“字节编号”与“UNICODE 字符编号”一致的那种编
码规则。”,疑问:UNICODE 字符编号是用两个字节存储的,iso-8859-1字符编码是用一个字节存储的,二者怎么会是一致的呢?
有哪位大神知道的给小弟讲些下,不甚感激!
其实这里很好明白
首先将字符串转换成byte数组。。以iso8859-1的编码来转换。。
然后使用new String创建一个新字符串,前面带上byte[]数组 后面带上他的具体编码。。
一般转码都使用这样的方式。。JSP里经常出现乱码的
都是加上过滤器然后中间使用这个new String(strLine.getBytes("iso8859-1"),"gb2312")方式将编码转换。
请采纳答案,支持我一下。 参考技术A System.out.println(bytes.length);
System.out.println(Str.getBytes().length);
加上这两句就比较容易理解了
因为我设置的字符集是UTF-8(一个中文3个字节),输出
5
9
ISO8859-1一个字符对应一个字节,java里面一个中文也是一个字符,所以ISO8859-1只用一个字节来编码。而且ISO8859-1不包含中文字符集。
在试试这个
for (int i = 0; i < bytes.length; i++)
System.out.println(bytes[i]);
可以看到前两个字符是63.
System.out.println((char)(63));
输出?
所以结果就如你看到的那样了。
至于第二个问题,网上的东西有正确的有错误的,误人子弟的人你见的还少吗本回答被提问者采纳 参考技术B 问题一:ISO8895-1是不支持中文的
问题二:没看懂
[Java基础]字符串中的编码解码问题
以上是关于java 中编码解码问题的主要内容,如果未能解决你的问题,请参考以下文章