我需要将使用IBM937代码页编码的EBCDIC编码转换为UTF-8格式,以便将文件加载到支持多字节的DB2数据库中。
我尝试过unix recode和iconv。他们都没有能力将IBM 937转换为UTF8。我正在寻找这个世界上任何可以在基于unix的系统上实现的实用程序(java,perl,unix)。有人可以帮助我吗?
SL
答案 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();
}
}