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字符编码是用一个字节存储的,二者怎么会是一致的呢?

有哪位大神知道的给小弟讲些下,不甚感激!

new String(strLine.getBytes("iso8859-1"),"gb2312")
其实这里很好明白
首先将字符串转换成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 中编码解码问题的主要内容,如果未能解决你的问题,请参考以下文章

java中编码与解码分别指啥?

java里关于String的编码与解码

java里关于String的编码与解码

尝试在已用 Java 编码的 JS 中解码 Base64 时出现“要解码的字符串未正确编码”错误

js前端Java后台编码解码

java中文乱码解决之道—–javaWeb中的编码解码