如何将带有中文字符的EBCDIC转换为UTF-8格式

时间:2011-03-11 19:14:44

标签: utf-8 ebcdic

我需要将使用IBM937代码页编码的EBCDIC编码转换为UTF-8格式,以便将文件加载到支持多字节的DB2数据库中。

我尝试过unix recode和iconv。他们都没有能力将IBM 937转换为UTF8。我正在寻找这个世界上任何可以在基于unix的系统上实现的实用程序(java,perl,unix)。有人可以帮助我吗?

SL

2 个答案:

答案 0 :(得分:1)

查看ICU(Unicode的国际组件):http://site.icu-project.org/

它有一个IBM-937的转换器:http://demo.icu-project.org/icu-bin/convexp?conv=ibm-937_P110-1999&s=ALL

  CU是一种成熟,广泛使用的一套   提供C / C ++和Java库   Unicode和全球化支持   软件应用。 ICU很广泛   便携式并提供应用程序   在所有平台上都有相同的结果   在C / C ++和Java软件之间。 ICU   是在非限制性的情况下发布的   开源许可证是合适的   用于商业软件   和其他开源或免费   软件

     

以下是一些亮点   ICU提供的服务:

     
      
  • 代码页转换:转换文本   数据往返于Unicode或几乎任何数据   其他字符集或编码。 ICU的   转换表基于charset   IBM在课程中收集的数据   几十年,是最多的   随时随地都可以使用。

  •   
  • 整理:比较字符串   符合公约和标准   特定语言,地区或   国家。 ICU的整理是基于   Unicode校对算法加   特定于语言环境的比较规则来自   Common Locale Data Repository,a   这种类型的综合来源   数据

  •   
  • 格式:格式编号,日期,   时间和货币金额   所选语言环境的约定。   这包括翻译月份和   天名称为所选语言,   选择合适的缩写,   正确排序字段等   数据也来自Common Locale   数据存储库。

  •   
  • 时间计算:多种类型   日历提供超出   传统的阳历。一个   彻底的时区计算   提供API。

  •   
  • Unicode支持:ICU密切跟踪   Unicode标准,提供简单   访问所有的Unicode   字符属性,Unicode   规范化,案例折叠等   基本操作由指定   Unicode标准。

  •   
  • 正则表达式:ICU的常规表达   表达式完全支持Unicode   同时提供非常有竞争力   性能

  •   
  • Bidi:支持处理文字   含有从左到右的混合物   (英语)和从右到左(阿拉伯语或   希伯来语)数据。

  •   
  • 文字边界:找到位置   单词,句子,段落   一系列文字或识别位置   这将适合行   在显示文本时包装。

  •   
     

还有更多。有关详细信息,请参阅ICU用户指南。

答案 1 :(得分:0)

Java似乎可以将IBM937代码页转换为UTF-8。

您可以将输入格式指定为“cp937”。

以下是Character and Byte Streams上的Oracle页面中的两种方法:

static String readInput() {

    StringBuffer buffer = new StringBuffer();
    try {
        FileInputStream fis = new FileInputStream("test.txt");
        InputStreamReader isr = new InputStreamReader(fis,
                          "cp937");
        Reader in = new BufferedReader(isr);
        int ch;
        while ((ch = in.read()) > -1) {
            buffer.append((char)ch);
        }
        in.close();
        return buffer.toString();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

static void writeOutput(String str) {

    try {
        FileOutputStream fos = new FileOutputStream("test.txt");
        Writer out = new OutputStreamWriter(fos, "UTF8");
        out.write(str);
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}