1.将字符串转换成byte数组再恢复:
byte[] getBytes(String charsetName)
String(byte[] bytes, String charsetName)
或getBytes()
String(byte[] bytes)
2.使用String sun.misc.BASE64Encode.encode(byte[] b)
byte[] String sun.misc.BASE64Decode.decodeBuffer(String str)
将字符串转换成byte[],再转换成ASCII码;恢复时做逆操作。
在字符串转换成byte[]时,尽量用byte[] getBytes(String charsetName)方法,解码时也用相同的charsetName做参数,如果都不charsetName可能会导致一些中文字符不能正确解码。
3.使用java.net.URLEncoder类和java.net.URLDecoder类
它有static方法将字符串转换成‘pplication/x-www-form-urlencoded'格式便于在网络中传播
形如‘%20%35'。
转自
字符:人们使用的记号,抽象意义上的一个符号。比如:‘1’,‘中’,‘a’ 字节:计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间字符集:使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。编码:规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码” 平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义。
一、编码基本知识
1.iso8859-1 属于单字节编码,最多能表示的字符范围是 0-255,应用于英文系列。比如,字母 'a' 的编码为0x61=97。 很明显,iso8859-1 编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用 iso8859-1 编码来表示。而且在很多协议上,默认使用该编码。比如,虽然"中文"两个字不存在 iso8859-1 编码,以 gb2312 编码为例,应该是"d6d0 cec4" 两个字符,使用 iso8859-1 编码的时候则将它拆开为 4 个字节来表示:"d6 d0 ce c4"(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是 UTF 编码,则是 6 个字节 "e4 b8 ad e6 96 87"。很明显,这种表示方法还需要以另一种编码为基础。