天天看点

Java-字符转码1. 两个函数2. 例子

今天在Android使用EditText打开文本文件时使用了字符地转码。

1. 两个函数

  • 解码
String test = "中文";
byte[] iso = test.getBytes("ISO8859-1");`
           

test.getBytes(encoding)

就是将test的字符串以encoding的编码形式转换为字节
  • 识别

    String iso_iso = new String(iso, "ISO8859-1");

new String(ISO,encoding)

这个与上个相反,将ISO这个字节转换为以encoding编码形式转换为字符串

2. 例子

String test = "中文";
    try {
         // 解码:将字符串以指定指定编码转换为字节
         byte[] iso = test.getBytes("ISO8859-1");
         byte[] gbk = test.getBytes("GBK");
         byte[] utf8 = test.getBytes("UTF-8");
         System.out.println("使用ISO解码: "+iso);
         System.out.println("使用GBK解码: " +gbk);
         System.out.println("使用UTF解码: " +utf8);
         // 组装识别:将字节以指定编码转换为字符串
         String iso_iso = new String(iso, "ISO8859-1");
         String gbk_gbk = new String(gbk, "GBK");
         String utf_utf = new String(utf8, "UTF-8");
         System.out.println("使用ISO解码后再用ISO识别: " + iso_iso);
         System.out.println("使用GBK解码后再用GBK识别: " + gbk_gbk);
         System.out.println("使用UTF解码后再用UTF识别: " + utf_utf);         
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
     }
           

![这里写图片描述](https://img-blog.csdn.net/20170509222659816?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb2hjZXp6eg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) **注意**:我们发现使用ISO解码后再编码就无法显示了,这是因为ISO属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。无法表示中文字符。所以无法通过ISO得到字符串的编码字节了。 但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。而且在很多协议上,默认使用该编码。 那么应该怎么办? 4步即可:

  1. GBK解码
  2. ISO识别
  3. ISO解码
  4. GBK识别

当然,不使用GBK而用UTF也是可以的,

  1. UTF解码
  2. ISO识别
  3. ISO解码
  4. UTF识别

只要使用其他含有中文字符的编码解码,在由ISO识别。之后反向解码识别就可以

byte[] utf8 = test.getBytes("UTF-8"); 
String t_utf8Toiso = new String(gbk, "ISO8859-1");
String ut_utf8Toiso = new String(t_utf8Toiso.getBytes("ISO8859-  1"),"GBK");
System.out.println("utf解码后ISO识别" + t_utf8Toiso); System.out.println("utf解码后ISO识别,ISO解码UTF识别" +ut_utf8Toiso);
           
Java-字符转码1. 两个函数2. 例子

这样就可以了