`
chentianliang
  • 浏览: 15297 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

中文简体转化繁体中文

    博客分类:
  • java
 
阅读更多

public class Encoding {

 // Supported Encoding Types

 public static int GB2312 = 0;

 

 public static int GBK = 1;

 

 public static int HZ = 2;

 

 public static int BIG5 = 3;

 

 public static int CNS11643 = 4;

 

 public static int UTF8 = 5;

 

 public static int UNICODE = 6;

 

 public static int UNICODET = 7;

 

 public static int UNICODES = 8;

 

 public static int ISO2022CN = 9;

 

 public static int ISO2022CN_CNS = 10;

 

 public static int ISO2022CN_GB = 11;

 

 public static int ASCII = 12;

 

 public static int OTHER = 13;

 

 public static int TOTALTYPES = 14;

 

 // Names of the encodings as understood by Java

 public static String[] javaname;

 

 // Names of the encodings for human viewing

 public static String[] nicename;

 

 // Names of charsets as used in charset parameter of HTML Meta tag

 public static String[] htmlname;

 

 static {

  javaname = new String[TOTALTYPES];

  nicename = new String[TOTALTYPES];

  htmlname = new String[TOTALTYPES];

 

  // Assign encoding names

  javaname[GB2312] = "GB2312";

  javaname[HZ] = "ASCII"; // What to put here? Sun doesn't support HZ

  javaname[GBK] = "GBK";

  javaname[ISO2022CN_GB] = "ISO2022CN_GB";

  javaname[BIG5] = "BIG5";

  javaname[CNS11643] = "EUC-TW";

  javaname[ISO2022CN_CNS] = "ISO2022CN_CNS";

  javaname[ISO2022CN] = "ISO2022CN";

  javaname[UTF8] = "UTF8";

  javaname[UNICODE] = "Unicode";

  javaname[UNICODET] = "Unicode";

  javaname[UNICODES] = "Unicode";

  javaname[ASCII] = "ASCII";

  javaname[OTHER] = "ISO8859_1";

 

  // Assign encoding names

  htmlname[GB2312] = "GB2312";

  htmlname[HZ] = "HZ-GB-2312";

  htmlname[GBK] = "GB2312";

  htmlname[ISO2022CN_GB] = "ISO-2022-CN-EXT";

  htmlname[BIG5] = "BIG5";

  htmlname[CNS11643] = "EUC-TW";

  htmlname[ISO2022CN_CNS] = "ISO-2022-CN-EXT";

  htmlname[ISO2022CN] = "ISO-2022-CN";

  htmlname[UTF8] = "UTF-8";

  htmlname[UNICODE] = "UTF-16";

  htmlname[UNICODET] = "UTF-16";

  htmlname[UNICODES] = "UTF-16";

  htmlname[ASCII] = "ASCII";

  htmlname[OTHER] = "ISO8859-1";

 

  // Assign Human readable names

  nicename[GB2312] = "GB-2312";

  nicename[HZ] = "HZ";

  nicename[GBK] = "GBK";

  nicename[ISO2022CN_GB] = "ISO2022CN-GB";

  nicename[BIG5] = "Big5";

  nicename[CNS11643] = "CNS11643";

  nicename[ISO2022CN_CNS] = "ISO2022CN-CNS";

  nicename[ISO2022CN] = "ISO2022 CN";

  nicename[UTF8] = "UTF-8";

  nicename[UNICODE] = "Unicode";

  nicename[UNICODET] = "Unicode (Trad)";

  nicename[UNICODES] = "Unicode (Simp)";

  nicename[ASCII] = "ASCII";

  nicename[OTHER] = "OTHER";

 

 }

 

}

 

 

 

==========================================================================

public class EncodingTranslate extends Encoding {

 // Simplfied/Traditional character equivalence hashes

 static protected Hashtable<String, String> s2thash, t2shash;

 

 static {

  String dataline;

 

  // Initialize and load in the simplified/traditional character hashses

  s2thash = new Hashtable<String, String>();

  t2shash = new Hashtable<String, String>();

 

  try {

   InputStream pydata = EncodingTranslate.class

     .getResourceAsStream("hcutf8.txt");

   BufferedReader in = new BufferedReader(new InputStreamReader(

     pydata, "UTF8"));

   while ((dataline = in.readLine()) != null) {

    // Skip empty and commented lines

    if (dataline.length() == 0 || dataline.charAt(0) == '#') {

     continue;

    }

 

    // Simplified to Traditional, (one to many, but pick only one)

    s2thash.put(dataline.substring(0, 1).intern(), dataline

      .substring(1, 2));

 

    // Traditional to Simplified, (many to one)

    for (int i = 1; i < dataline.length(); i++) {

     t2shash.put(dataline.substring(i, i + 1).intern(), dataline

       .substring(0, 1));

    }

   }

  } catch (Exception e) {

   System.err.println(e);

  }

 

 }

 

 public static String convertString(String dataline, int source_encoding,

   int target_encoding) {

  StringBuffer outline = new StringBuffer();

  int lineindex;

 

  if (source_encoding == HZ) {

   dataline = hz2gb(dataline);

  }

  for (lineindex = 0; lineindex < dataline.length(); lineindex++) {

   if ((source_encoding == GB2312 || source_encoding == GBK

     || source_encoding == ISO2022CN_GB || source_encoding == HZ

     || source_encoding == UNICODE

     || source_encoding == UNICODES || source_encoding == UTF8)

     && (target_encoding == BIG5 || target_encoding == CNS11643

       || target_encoding == UNICODET || target_encoding == ISO2022CN_CNS)) {

    if (s2thash.containsKey(dataline.substring(lineindex,

      lineindex + 1)) == true) {

     outline.append(s2thash.get(dataline.substring(lineindex,

       lineindex + 1).intern()));

    } else {

     outline

       .append(dataline

         .substring(lineindex, lineindex + 1));

    }

   } else if ((source_encoding == BIG5 || source_encoding == CNS11643

     || source_encoding == UNICODET || source_encoding == UTF8

     || source_encoding == ISO2022CN_CNS

     || source_encoding == GBK || source_encoding == UNICODE)

     && (target_encoding == GB2312

       || target_encoding == UNICODES

       || target_encoding == ISO2022CN_GB || target_encoding == HZ)) {

    if (t2shash.containsKey(dataline.substring(lineindex,

      lineindex + 1)) == true) {

     outline.append(t2shash.get(dataline.substring(lineindex,

       lineindex + 1).intern()));

    } else {

     outline

       .append(dataline

         .substring(lineindex, lineindex + 1));

    }

   } else {

    outline.append(dataline.substring(lineindex, lineindex + 1));

   }

  }

 

  if (target_encoding == HZ) {

   // Convert to look like HZ

   return gb2hz(outline.toString());

  }

 

  return outline.toString();

 }

 

 public static String hz2gb(String hzstring) {

  byte[] hzbytes = new byte[2];

  byte[] gbchar = new byte[2];

  int byteindex = 0;

  StringBuffer gbstring = new StringBuffer("");

 

  try {

   hzbytes = hzstring.getBytes("8859_1");

  } catch (Exception usee) {

   System.err.println("Exception " + usee.toString());

   return hzstring;

  }

 

  // Convert to look like equivalent Unicode of GB

  for (byteindex = 0; byteindex < hzbytes.length; byteindex++) {

   if (hzbytes[byteindex] == 0x7e) {

    if (hzbytes[byteindex + 1] == 0x7b) {

     byteindex += 2;

     while (byteindex < hzbytes.length) {

      if (hzbytes[byteindex] == 0x7e

        && hzbytes[byteindex + 1] == 0x7d) {

       byteindex++;

       break;

      } else if (hzbytes[byteindex] == 0x0a

        || hzbytes[byteindex] == 0x0d) {

       gbstring.append((char) hzbytes[byteindex]);

       break;

      }

      gbchar[0] = (byte) (hzbytes[byteindex] + 0x80);

      gbchar[1] = (byte) (hzbytes[byteindex + 1] + 0x80);

      try {

       gbstring.append(new String(gbchar, "GB2312"));

      } catch (Exception usee) {

       System.err.println("Exception " + usee.toString());

      }

      byteindex += 2;

     }

    } else if (hzbytes[byteindex + 1] == 0x7e) { // ~~ becomes ~

     gbstring.append('~');

    } else { // false alarm

     gbstring.append((char) hzbytes[byteindex]);

    }

   } else {

    gbstring.append((char) hzbytes[byteindex]);

   }

  }

  return gbstring.toString();

 }

 

 public static String gb2hz(String gbstring) {

  StringBuffer hzbuffer;

  byte[] gbbytes = new byte[2];

  int i;

  boolean terminated = false;

 

  hzbuffer = new StringBuffer("");

  try {

   gbbytes = gbstring.getBytes("GB2312");

  } catch (Exception usee) {

   System.err.println(usee.toString());

   return gbstring;

  }

 

  for (i = 0; i < gbbytes.length; i++) {

   if (gbbytes[i] < 0) {

    hzbuffer.append("~{");

    terminated = false;

    while (i < gbbytes.length) {

     if (gbbytes[i] == 0x0a || gbbytes[i] == 0x0d) {

      hzbuffer.append("~}" + (char) gbbytes[i]);

      terminated = true;

      break;

     } else if (gbbytes[i] >= 0) {

      hzbuffer.append("~}" + (char) gbbytes[i]);

      terminated = true;

      break;

     }

     hzbuffer.append((char) (gbbytes[i] + 256 - 0x80));

     hzbuffer.append((char) (gbbytes[i + 1] + 256 - 0x80));

     i += 2;

    }

    if (terminated == false) {

     hzbuffer.append("~}");

    }

   } else {

    if (gbbytes[i] == 0x7e) {

     hzbuffer.append("~~");

    } else {

     hzbuffer.append((char) gbbytes[i]);

    }

   }

  }

  return new String(hzbuffer);

 }

 

 public static void convertFile(String sourcefile, String outfile,

   int source_encoding, int target_encoding) {

  BufferedReader srcbuffer;

  BufferedWriter outbuffer;

  String dataline;

 

  try {

   srcbuffer = new BufferedReader(new InputStreamReader(

     new FileInputStream(sourcefile), javaname[source_encoding]));

   outbuffer = new BufferedWriter(new OutputStreamWriter(

     new FileOutputStream(outfile), javaname[target_encoding]));

   while ((dataline = srcbuffer.readLine()) != null) {

    outbuffer.write(convertString(dataline, source_encoding,

      target_encoding));

    outbuffer.newLine();

   }

   srcbuffer.close();

   outbuffer.close();

  } catch (Exception ex) {

   System.err.println(ex);

  }

 }

 

 public static void main(String argc[]) {

  int codetypes[];

  char codetype;

 

  // Determine source and target encodings, store in codetypes

  codetypes = new int[2];

  argc[0] = argc[0].toLowerCase();

  for (int i = 0; i < 2; i++) {

   codetype = argc[0].charAt(i + 1);

   // Print Help

   if (codetype == 'h') {

    System.exit(0);

   }

 

   if (codetype == 'g') {

    codetypes[i] = GB2312;

   } else if (codetype == 'h') {

    codetypes[i] = HZ;

   } else if (codetype == 'b') {

    codetypes[i] = BIG5;

   } else if (codetype == 'c') {

    codetypes[i] = CNS11643;

   } else if (codetype == '8') {

    codetypes[i] = UTF8;

   } else if (codetype == 'u') {

    codetypes[i] = UNICODE;

   } else if (codetype == 't') {

    codetypes[i] = UNICODET;

   } else if (codetype == 's') {

    codetypes[i] = UNICODES;

   } else if (codetype == 'i') {

    codetypes[i] = ISO2022CN;

   } else if (codetype == '2') {

    codetypes[i] = ISO2022CN_GB;

   } else if (codetype == 'n') {

    codetypes[i] = ISO2022CN_CNS;

   } else if (codetype == 'k') {

    codetypes[i] = GBK;

   }

  }

 

  // Call the file convert function with appropriate arguments

  EncodingTranslate.convertFile(argc[1], argc[2], codetypes[0], codetypes[1]);

 }

 


}

 

 

 

//测试方法 注意附件的文件请放在同一目录下

 

public static void main(String[] args) {
           system.out.println(EncodingTranslate.convertString("测试数据安定发生地发生法撒旦法",Encoding.GBK,Encoding.BIG5)); //转化成繁体中文
}

分享到:
评论

相关推荐

    php 中文 简体繁体 互转

    例如,如果我们要将一个GBK编码的简体中文字符串转换为UTF-8编码的繁体中文,可以这样写: ```php $simplified = '简体中文'; // 假设这是GBK编码的简体中文字符串 $traditional = iconv('GBK', 'BIG5', $...

    scala java 简体、繁体互转换,判断是否为简体、繁体

    总的来说,无论是Scala还是Java,都有多种方法来处理简体和繁体中文的转换与识别。选择哪种方法取决于具体的需求,包括性能、准确性和项目依赖等因素。对于大型项目,建议使用稳定的第三方库,因为它们通常经过充分...

    中文汉字简体繁体转换工具

    在IT领域,中文汉字简体与繁体的转换是一个常见的需求,特别是在文本处理、文档编辑以及跨地区交流中。本文将深入探讨“中文汉字简体繁体转换工具”的相关知识点,帮助用户理解和应用这一功能。 首先,我们了解简体...

    汉字简体繁体参照表(数据库)

    《汉字简体繁体参照表》是一个非常实用的数据库资源,包含了大约4792条汉字的简体与繁体转换映射数据。这个数据库涵盖了多种格式,包括SQL、JSON、CSV以及XLS,旨在方便用户在不同场景下进行简繁体汉字的互换和处理...

    C# 中文简体繁体转换(字符串处理必学)

    在.NET框架中,C#语言提供了丰富的库支持各种文本处理任务,其中包括简体中文与繁体中文之间的转换。这个主题是字符串处理中的一个重要部分,对于处理多语言应用或需要跨地区交流的系统尤为关键。本文将详细介绍如何...

    html简体繁体转换

    在IT领域,文本转换是一个常见的需求,特别是在处理中文内容时,由于存在简体中文和繁体中文的区别,转换工具显得尤为重要。"html简体繁体转换"这个主题聚焦于如何在HTML文档中进行这种转换。HTML(超文本标记语言)...

    javascript汉字简体繁体转换

    这个标题“javascript汉字简体繁体转换”表明我们讨论的主题是利用JavaScript实现中文字符的互换。描述中提到“测试通过”,意味着已经有一个可行的解决方案,而且经过了验证。 在JavaScript中进行简繁体转换,主要...

    中文繁体简体转换依赖文件

    这个压缩包文件“中文繁体简体转换依赖文件”提供了必要的资源和工具,使得开发者能够方便地在繁体中文和简体中文之间进行文本转换。以下是对这个主题的详细讲解: 首先,我们需要理解繁体中文和简体中文的区别。...

    易语言中文简体繁体转换

    本资源"易语言中文简体繁体转换"提供了一种解决方案,帮助用户在简体中文和繁体中文之间进行文本转换。 在编程中,特别是在处理多语言应用时,中文简体与繁体的转换是一项常见的需求。简体中文是中国大陆广泛使用的...

    使用SQL server 把简体中文转换繁体的过程

    使用SQL server 把简体中文转换繁体的过程

    java中文简体转繁体ZHConverter

    在处理中文字符时,Java提供了多种支持,包括简体中文向繁体中文的转换。`ZHConverter` 是一个特定的Java工具类,专用于实现这个功能。它不仅能够转换单个文本字符串,还能对整个文件夹内的所有文件进行批量转换,这...

    汉字简体繁体转换类(VC6)

    总的来说,"汉字简体繁体转换类(VC6)"是一个实用的工具,它为开发者提供了处理中文字符集转换的便利,有助于提高程序的兼容性和用户体验。在处理多语言环境的软件开发中,这样的类库是不可或缺的组成部分。

    中文简体&繁体转换工具

    一款实用的转换工具,可以在简体与繁体之间互相转换,操作方便,实用。

    web js转换简体繁体

    在网页开发中,有时我们需要为用户提供简体中文与繁体中文之间的转换功能,以满足不同地区用户的阅读需求。本文将详细介绍一个基于JavaScript实现的“web js转换简体繁体”插件,帮助开发者轻松实现这一功能。 ...

    汉字简体繁体相互转换工具SimplifiedTraditional

    《汉字简体繁体相互转换工具SimplifiedTraditional》是一款专门针对中文简体与繁体转换的实用软件。在日常工作中,我们可能需要处理简体和繁体汉字的文档,这时这款工具就能大显身手。它能高效、准确地完成简体到...

    ios简体中文全局转繁体中文

    标题"ios简体中文全局转繁体中文"所涉及的知识点是iOS应用中的语言转换功能,特别是如何将应用内的简体中文文本自动转换为繁体中文。这一功能通常是通过集成特定的资源代码来实现的。 描述中提到,“只要把这个资源...

    繁体中文转简体中文 繁体 简体互转

    这是一款双向转换工具,既能够将简体中文文本转化为繁体中文,也能将繁体中文文本转化为简体中文。这对于那些需要在两种文字之间进行交流或处理多语言文档的人来说,非常实用。 描述中提到“本软件合二为一”,意味...

    JS实现简体和繁体互相转换

     繁体中文  这个是每个页面中显示进行简繁转换的链接,您可以放在页面顶部,如顶部的导航处。  如果您用的是默认的动易模板,则进入网站后台,依次点击“系统设置”-&gt;“自定义标签管理”-&gt;“2006海蓝”-&gt;“{$MY_...

    SQL简体与繁体转换

    使用SQL server 把简体中文转换繁体的过程

Global site tag (gtag.js) - Google Analytics