「java对象解码」java decode解码
本篇文章给大家谈谈java对象解码,以及java decode解码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
求java编码和解码的通俗解释
在内存中,本来没有字符的概念,每个字节都是一个0-255的数字。我们把数字进行编号,每个数字代表一个字符。追根溯源,以ASCII码为例。比如65(十进制)定义为字符'A',66定义为'B',61定义为'='。这就是编码。然后才有了char型定义,实际上等同于byte,只是使用char型时就知道要表示的是字符。如果char ch=65,然后printf("%c",ch),出来就是'A',这就是解码了。如果printf("%d",ch),那出来就仍是65。 单字节byte只能支持0-255的编码,对于亚洲语言,像中文汉字,是完全不够用的。所以之后有双字节(0-65535)以及多字节编码的出现。以双字节为例,0-65535并不能同时为多种语言编码。所以打个比方,同一个数字,可能在中文GBK编码时定义为汉字'王',而在日文编码MS932中就被定义为'小'。当内存中的数字被解释为字符(文字和符号)时,就是解码过程,把文字和符号用数字定义时就是编码。实际编码过程中,不少是前后字节有关联性定义的,并非我说的那么简单。 在网络传输时,实际上仍然是单字节,甚至是字节中1个bit一个bit传输的。我们在传输时使用byte数组,即基本类型,而在传输前后转回GBK中文编码。以老美的视角来看问题,则从byte变成亚洲语言(GBK/Unicode)属于编码encoding,而相反过程是解码decoding。
java里关于String的编码与解码
public
byte[]
getBytes(String
charsetName)
使用指定的字符集将此String编码为byte序列,结果存在一个byte数组中
public
String(byte[]
bytes,
String
charsetName)
通过使用指定的
charset
解码指定的
byte
数组,构造一个新的
String。
在网络传输中,信息都是以字节序列的方式传输的。所以,发送方的String要按照某种编码方式(如UTF-8,GBK)编码为字节序列,在网络中传输后,接收方取得这个字节序列,按照相同的编码方式将字节序列解码为String。
请看下面的代码片段:
String
name
=
"张三";
byte[]
b1
=
name.getBytes("UTF-8");
String
name1
=
new
String(b1,
"UTF-8");
//编码解码相同,正常显示
System.out.println(name1);
String
name2
=
new
String(b1,
"GBK");
//编码解码不同,乱码
System.out.println(name2);
byte[]
b2
=
name.getBytes("GBK");
String
name3
=
new
String(b2,
"GBK");
//编码解码相同,正常显示
System.out.println(name3);
String
name4
=
new
String(b2,
"UTF-8");
//编码解码不同,乱码
System.out.println(name4);
至于你的那个情况,要先用gbk编码,然后再用utf-8解码才能获得正常的字符串,我估计是因为
1.传输过来的字节码是用utf-8编码的,假设字节码为b。
2.你获得的那个字符串,假设为s,是用gbk对b进行解码获得的字符串,所以是乱码。
3.你使用gbk对s进行编码,用gbk解码之后再编码,于是获得了原来的b。
4.你使用utf-8解码,所以获得了正常的字符串。
简单的说:
b
-
(gbk解码)
-
乱码
-
[此处开始是你做的](gbk编码)
-
b
-
(utf-8解码)
-
正常字符串
研究完编码收获会不小的,对以后理解Java的输入输出(尤其是网络通信和文件读写)都很有帮助。
java中编码与解码分别指什么?
java中编码:URLEncoder.encode(strUri,"utf-8");
java中解码码:URLDecoder.decode(strUri,"utf-8");
java编码和解码
流读取文件,具有转换编码功能的有:OutputStreamWriter和InputStreamReader,
构造器有如:
InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
OutputStreamWriter(OutputStream out, String charsetName)
创建使用指定字符集的 OutputStreamWriter。
处理字符串编码问题:
重新对获取的字符串进行编码:Byte[] bytes = str.getBytes(String encodeCharsetNam);
重新对bytes进行解码,创建新的字符串对象:str = new String(Byte[] bytes,String decodeCharsetName);
一般结合使用:str = new String(str.getBytes(String encodeCharsetName),String decodeCharsetName);
例如:resultName=new String(username.getBytes("ISO-8859-1"),"UTF-8");
还可以加入判断:
if(!Charset.forName("gbk").newEncoder().canEncode(str)){str = new Strin(str.getBytes("ISO-8859-1"),"UTF-8");}else{str = new String(str.getBytes("ISO-8859-1"),"gbk");}
处理请求参数传递编码问题:
java中编码:URLEncoder.encode(strUri,"utf-8");
java中解码码:URLDecoder.decode(strUri,"utf-8");
js中编码:encodeURIComponent(strUri);encodeURI(strUri);escape(str);
js中解码:decodeURIComponent(strUri);decodeURI(strUri);unescape(str);
补充概念:
URI组件:主机、端口、路径、查询参数、片段等。
URI组件分隔符::/?#[]@,冒号用于分隔协议和主机,/用于分隔主机和 路径,?用于分隔路径和查询参数,用于分隔多个查询参数等。
URI中的不安全字符或保留字符: ! * ‘ ( ) ; : @ = + $ , / ? # [ ] 他们具有特殊作用,例如上面的分隔作用。
URI允许出现的字符:只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符,其他字符均需要经过编码之后才能出现在Url中,比如使用保留字符的原意,而不是特殊作用。
js向java/jsp的编码与解码:
js中编码:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));
java/jsp中解码: java.net.URLDecoder.decode(strUri,"UTF-8");
js中编码两次的问题:如果使用一次编码,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码值,两位两位取出后进行解码。
然后再传递给处理页面,然后由处理页面进行再次解码,这样前面就缺少了一次编码过程,所以前面需要连续两次编码。
java对象解码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java decode解码、java对象解码的信息别忘了在本站进行查找喔。