java万能字符转换

By | 12月13日
Advertisement

不多说,代码中有详细的注释

import java.io.UnsupportedEncodingException;

/**
 * 转换字符串的编码
 */
public class ChangeCharset {
     /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
     public static final String US_ASCII = "US-ASCII";

     /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
     public static final String ISO_8859_1 = "ISO-8859-1";

     /** 8 位 UCS 转换格式 */
     public static final String UTF_8 = "UTF-8";

     /** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */
     public static final String UTF_16BE = "UTF-16BE";

     /** 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序 */
     public static final String UTF_16LE = "UTF-16LE";

     /** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */
     public static final String UTF_16 = "UTF-16";

     /** 中文超大字符集 */
     public static final String GBK = "GBK";

     /**
      * 将字符编码转换成US-ASCII码
      */
     public String toASCII(String str) throws UnsupportedEncodingException {
          return this.changeCharset(str, US_ASCII);
     }

     /**
      * 将字符编码转换成ISO-8859-1码
      */
     public String toISO_8859_1(String str) throws UnsupportedEncodingException {
          return this.changeCharset(str, ISO_8859_1);
     }

     /**
      * 将字符编码转换成UTF-8码
      */
     public String toUTF_8(String str) throws UnsupportedEncodingException {
          return this.changeCharset(str, UTF_8);
     }

     /**
      * 将字符编码转换成UTF-16BE码
      */
     public String toUTF_16BE(String str) throws UnsupportedEncodingException {
          return this.changeCharset(str, UTF_16BE);
     }

     /**
      * 将字符编码转换成UTF-16LE码
      */
     public String toUTF_16LE(String str) throws UnsupportedEncodingException {
          return this.changeCharset(str, UTF_16LE);
     }

     /**
      * 将字符编码转换成UTF-16码
      */
     public String toUTF_16(String str) throws UnsupportedEncodingException {
          return this.changeCharset(str, UTF_16);
     }

     /**
      * 将字符编码转换成GBK码
      */
     public String toGBK(String str) throws UnsupportedEncodingException {
          return this.changeCharset(str, GBK);
     }

     /**
      * 字符串编码转换的实现方法
      *
      * @param str
      *            待转换编码的字符串
      * @param newCharset
      *            目标编码
      * @return
      * @throws UnsupportedEncodingException
      */
     public String changeCharset(String str, String newCharset)
               throws UnsupportedEncodingException {
          if (str != null) {
               // 用默认字符编码解码字符串。
               byte[] bs = str.getBytes();
               // 用新的字符编码生成字符串
               return new String(bs, newCharset);
          }
          return null;
     }

     /**
      * 字符串编码转换的实现方法
      *
      * @param str
      *            待转换编码的字符串
      * @param oldCharset
      *            原编码
      * @param newCharset
      *            目标编码
      * @return
      * @throws UnsupportedEncodingException
      */
     public String changeCharset(String str, String oldCharset, String newCharset)
               throws UnsupportedEncodingException {
          if (str != null) {
               // 用旧的字符编码解码字符串。解码可能会出现异常。
               byte[] bs = str.getBytes(oldCharset);
               // 用新的字符编码生成字符串
               return new String(bs, newCharset);
          }
          return null;
     }

     public static void main(String[] args) throws UnsupportedEncodingException {
          ChangeCharset test = new ChangeCharset();
          String str = "This is a 中文的 String!";
          System.out.println("str: " + str);
          String gbk = test.toGBK(str);
          System.out.println("转换成GBK码: " + gbk);
          System.out.println();
          String ascii = test.toASCII(str);
          System.out.println("转换成US-ASCII码: " + ascii);
          gbk = test.changeCharset(ascii, ChangeCharset.US_ASCII,
                    ChangeCharset.GBK);
          System.out.println("再把ASCII码的字符串转换成GBK码: " + gbk);
          System.out.println();
          String iso88591 = test.toISO_8859_1(str);
          System.out.println("转换成ISO-8859-1码: " + iso88591);
          gbk = test.changeCharset(iso88591, ChangeCharset.ISO_8859_1,
                    ChangeCharset.GBK);
          System.out.println("再把ISO-8859-1码的字符串转换成GBK码: " + gbk);
          System.out.println();
          String utf8 = test.toUTF_8(str);
          System.out.println("转换成UTF-8码: " + utf8);
          gbk = test.changeCharset(utf8, ChangeCharset.UTF_8, ChangeCharset.GBK);
          System.out.println("再把UTF-8码的字符串转换成GBK码: " + gbk);
          System.out.println();
          String utf16be = test.toUTF_16BE(str);
          System.out.println("转换成UTF-16BE码:" + utf16be);
          gbk = test.changeCharset(utf16be, ChangeCharset.UTF_16BE,
                    ChangeCharset.GBK);
          System.out.println("再把UTF-16BE码的字符串转换成GBK码: " + gbk);
          System.out.println();
          String utf16le = test.toUTF_16LE(str);
          System.out.println("转换成UTF-16LE码:" + utf16le);
          gbk = test.changeCharset(utf16le, ChangeCharset.UTF_16LE,
                    ChangeCharset.GBK);
          System.out.println("再把UTF-16LE码的字符串转换成GBK码: " + gbk);
          System.out.println();
          String utf16 = test.toUTF_16(str);
          System.out.println("转换成UTF-16码:" + utf16);
          gbk = test.changeCharset(utf16, ChangeCharset.UTF_16LE,
                    ChangeCharset.GBK);
          System.out.println("再把UTF-16码的字符串转换成GBK码: " + gbk);
          String s = new String("中文".getBytes("UTF-8"), "UTF-8");
          System.out.println(s);
     }
}

Similar Posts:

  • java IO(File类、字节流与字符流、字节字符转换流)

    File类 在整个io包中,唯一表示与文件本身有关的类就是File类.使用File类可以进行创建或删除文件等常用操作,要想使用File类,则首先要观察File类的构造方法,此类的常用构造方法如下 [java] view plaincopyprint? public File(String pathname)实例化File类的时候,必须设置好路径根据路径找到文件 File类中的主要方法和常量 方法或常量 类型 描述 public static final String pathSeparato

  • Java语言: java中字符窜与16进制,byte之间的转换

    Java语言: java中字符窜与16进制,byte之间的转换 package org.lib.code; /** * java String 与各种进制字符之间的转换 * * @author 流水孟春^篱笆墙外 08.3.4 */ public class Coding { /** * 字符串转换成十六进制值 * @param bin String 我们看到的要转换成十六进制的字符串 * <a href=""http://www.eoeandroid.com/home.php?

  • Java复习之IO字节字符转换流

    这篇博客主要是总结一下Java中IO字节字符转换流的知识 1.转换流概述 转换流:可以将一个字节流转换成字符流也可以将一个字符流转换成字节流 2.OutputStreamWriter 可以将输出的字符流转换为字节流输出形式 public class OutputStreamWriter extends Writer OutputStreamWriter是字符流通向字节流的桥梁:可以用指定的charset将要写入流中的字符编码成字节.它使用的字符集可以由 名称指定或者显示给定,否则将接受平台默认的

  • java 实现视频转换通用工具类:视频相互转换-Ffmpeg(三)

    java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) 这节主要是ffmpeg的相关方法封装,在实际调用中主要使用ffmpeg的方法,Mencoder方法暂时没有用上,同时ffmpeg都是采用的编译好的静态文件.视频转换时没有加额外的参数,如果有需要,可添加扩展就ok. 1.判断系统支持那些编码 [java] view plaincopy /** * 判断系统支持那些编码 * @param srcVideoPat

  • Java中文字符所占的字节数

    Java中文字符所占的字节数 Java语言中,中文字符所占的字节数取决于字符的编码方式,一般情况下,采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节:采用GB2312或GBK编码方式时,一个中文字符占2个字节:而采用UTF-8编码方式时,一个中文字符会占3个字节.我们可以通过String类的getBytes(String charsetName)方法来获取到字符串以指定编码方式编码后所得到的字节数组,然后字节数组的长度就是该字符串在指定编码方式下所占的字节数.下面为一

  • (转)Java时间格式转换大全

    Java时间格式转换大全 import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @return 返回时间类型 yyyy-MM-dd HH:mm:ss */ public static Date getNowDate() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateForma

  • (best!)JAVA中文字符编码问题详解

    转载自:http://blog.csdn.net/youyue/article/details/4580402 JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经掌握了对付这些字符乱码怪兽的诀窍.可当过段时间,换了个应用或换了个环境,又会碰到那讨厌的火星文,并再次无所适从.于是下决心好好整理一下中文字符编码问题,以方便自

  • 计算机编码基础知识及Java中编码转换

    一.前言 最近项目中用到招商银行的企业直连功能,通过接口的方式直接调用招商银行的前置机(http://www.cmbchina.com/corporate/firmbank/FirmbankInfo.aspx?guid=d0917853-6256-44ea-b1e2-24b8524042db)而后进行转账和信息的查询.但招商银行的数据是通过gbk格式进行传输的,而我们的系统使用的utf8编码格式,理所当然的就出现了乱码问题. 借此机会,对编码及Java中如何解决乱码进行汇总. 如果只是想要知道如

  • JAVA中文字符乱码解决详解

    首先要了解JAVA处理字符的原理.JAVA使用UNICODE来存储字符数据,处理字符时通常有三个步骤: – 按指定的字符编码形式,从源输入流中读取字符数据 – 以UNICODE编码形式将字符数据存储在内存中 – 按指定的字符编码形式,将字符数据编码并写入目的输出流中. 所以JAVA处理字符时总是经过了两次编码转换,一次是从指定编码转换为UNICODE编码,一次是从UNICODE编码转换为指定编码.如果在读入时用 错误的形式解码字符,则内存存储的是错误的UNICODE字符.而从最初文件中读出的字符

  • IO-字节、字符转换流

    字节.字符转换流 OutputStreramWriter:将输出的字节流转化为字符流 InputStreamReader:将输入的字节流转换为字符流 但是不管如何操作,最后都是以字节的形式保存在文件中的. 将字节输出流转化为字符输出流 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.

Tags: