您的位置:

java解码,java解码编码

本文目录一览:

java是如何编码解码的

[java] view plain copy

String name="I am 小明";

toHex(name.toCharArray());

span style="font-size:18px; white-space: pre;"/spanpre name="code" class="java"try{

byte[] iso8859=name.getBytes("ISO-8859-1");

[java] view plain copy

toHex(iso8859);

[java] view plain copy

byte[] gb2312=name.getBytes("GB2312");

[java] view plain copy

toHex(gb2312);

[java] view plain copy

byte[] gbk=name.getBytes("GBK");

[java] view plain copy

toHex(gbk);

[java] view plain copy

}

[java] view plain copy

String str="小米";

byte[] b=str.getBytes("UTF-8");

[java] view plain copy

public byte[] getBytes(String charsetName)

throws UnsupportedEncodingException {

if (charsetName == null) throw new NullPointerException();

return StringCoding.encode(charsetName, value, 0, value.length);

}

[java] view plain copy

static byte[] encode(String charsetName, char[] ca, int off, int len)

throws UnsupportedEncodingException

{

StringEncoder se = deref(encoder);

String csn = (charsetName == null) ? "ISO-8859-1" : charsetName;

if ((se == null) || !(csn.equals(se.requestedCharsetName())

|| csn.equals(se.charsetName()))) {

se = null;

try {

Charset cs = lookupCharset(csn); //生成字符集实例

if (cs != null)

se = new StringEncoder(cs, csn);

} catch (IllegalCharsetNameException x) {}

if (se == null)

throw new UnsupportedEncodingException (csn);

set(encoder, se);

}

return se.encode(ca, off, len);

}

[java] view plain copy

private static Charset lookupCharset(String csn) {

if (Charset.isSupported(csn)) {

try {

return Charset.forName(csn);

} catch (UnsupportedCharsetException x) {

throw new Error(x);

}

}

return null;

}

[java] view plain copy

private StringEncoder(Charset cs, String rcn) {

this.requestedCharsetName = rcn;

this.cs = cs;

this.ce = cs.newEncoder()

.onMalformedInput(CodingErrorAction.REPLACE)

.onUnmappableCharacter(CodingErrorAction.REPLACE);

this.isTrusted = (cs.getClass().getClassLoader0() == null);

}

在Java中如何进行BASE64编码和解码

import sun.misc.BASE64Encoder; 

import sun.misc.BASE64Decoder; 

// 将 s 进行 BASE64 编码 

public static String getBASE64(String s) { 

if (s == null) return null; 

return (new sun.misc.BASE64Encoder()).encode( s.getBytes() ); 

// 将 BASE64 编码的字符串 s 进行解码 

public static String getFromBASE64(String s) { 

if (s == null) return null; 

BASE64Decoder decoder = new BASE64Decoder(); 

try { 

byte[] b = decoder.decodeBuffer(s); 

return new String(b); 

} catch (Exception e) { 

return null; 

}

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中编码两次的问题:如果使用一次编码,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码值,两位两位取出后进行解码。

然后再传递给处理页面,然后由处理页面进行再次解码,这样前面就缺少了一次编码过程,所以前面需要连续两次编码。