A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘俊佳 中级黑马   /  2012-7-17 14:13  /  1351 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package practice;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class EncodeDemo {
        public static void main(String[] args) throws IOException{
                String s="哈哈";
               
                byte[] b1=s.getBytes("GBK");
               
               
                System.out.println(Arrays.toString(b1));
                String s1=new String(b1,"iso8859-1");
                System.out.println("s1="+s1);
                //对s1进行ISO8859-1编码
                byte[] b2=s1.getBytes("iso8859-1");
                System.out.println(Arrays.toString(b2));
               
                String s2=new String(b2,"gbk");
               
                System.out.println("s2="+s2);
               
       
               
               
        }

       
               
        }


请问以上代码是怎样编码和解码?听不懂

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

2 个回复

倒序浏览
党巾水 来自手机 中级黑马 2012-7-17 17:15:39
沙发
本帖最后由 刘馨琪 于 2012-7-17 17:21 编辑

我手机上网,不方便,只写主要内容了。计算机有多个编码表,文件可以以这些编码表为基础进行编码。而上述程序中的方法里就是自己指定编码表。具体编码表是什么格式楼主可以查看API,里面有详细说明。
简单说就是我想说“黑马”这个词,在编码表A中“黑”对应001,“马”对应010。在编码表B中“黑”对应100,“马”对应101。你用A表寸成001010,我用B表就无法知道你写的是“黑马”两个字。从“黑马”到001010就是编码,反过来是解码,解码需要知道编码表。
回复 使用道具 举报
本帖最后由 黑马刘涛 于 2012-7-17 17:32 编辑
[/quote]
[quote]Arrays类:public static String toString(byte[] a)返回指定数组内容的字符串表示形式。字符串表示形式由数组的元素列表组成,括在方括号("[]")中。相邻元素用字符 ", "(逗号加空格)分隔。

String类: public String(byte[] bytes,
String charsetName)
throws UnsupportedEncodingException通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。
当给定 byte 在给定字符集中无效的情况下,此构造方法的行为没有指定。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。


参数:
bytes - 要解码为字符的 byte
charsetName - 受支持的 charset 的名称

以上为引用API说明:
  1. package practice;

  2. import java.io.IOException;
  3. import java.io.UnsupportedEncodingException;
  4. import java.util.Arrays;

  5. public class EncodeDemo {
  6. public static void main(String[] args) throws IOException{
  7. String s="哈哈";

  8. byte[] b1=s.getBytes("GBK"); //将字符串"GBK"转化为字节存入字节数组中


  9. System.out.println(Arrays.toString(b1));//打印[G,B,K]
  10. String s1=new String(b1,"iso8859-1");// 可查阅API说明:创建一个新的字符串对象,指定编码为iso8859-1,也就是将“GBK”这个字符串按iso8859-1编码方式进行了一次编码
  11. System.out.println("s1="+s1);
  12. //对s1进行ISO8859-1编码
  13. byte[] b2=s1.getBytes("iso8859-1"); //"iso8859-1" /存入字节数组中
  14. System.out.println(Arrays.toString(b2));

  15. String s2=new String(b2,"gbk");//将字符串"iso8859-1"按编码方式“gbk”编码

  16. System.out.println("s2="+s2);
  17. //如果是对同一个字符串进行编码解码,最后还是能打印出源字符串,这就是编码解码的意义



  18. }



  19. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马