我有一個要求,將使用IBM937代碼頁編碼的EBCDIC編碼文件轉換爲UTF-8格式,以便將文件加載到支持多字節的DB2數據庫。如何將中文字符的EBCDIC轉換爲UTF-8格式
我試過unix recode和iconv。他們都沒有能力將IBM 937轉換爲UTF8。我正在尋找這個世界上的任何實用程序(java,perl,unix),這可以在基於unix的系統上實現。有人可以幫我嗎?
SL
我有一個要求,將使用IBM937代碼頁編碼的EBCDIC編碼文件轉換爲UTF-8格式,以便將文件加載到支持多字節的DB2數據庫。如何將中文字符的EBCDIC轉換爲UTF-8格式
我試過unix recode和iconv。他們都沒有能力將IBM 937轉換爲UTF8。我正在尋找這個世界上的任何實用程序(java,perl,unix),這可以在基於unix的系統上實現。有人可以幫我嗎?
SL
看來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();
}
}
看看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 是根據非限制性 開放源代碼許可證發佈的,適用於商業軟件 以及其他開放源代碼軟件或免費 軟件。
這裏是伊斯蘭法院聯盟提供的 服務的幾大亮點:
代碼頁轉換:轉換文本 數據或從Unicode和幾乎任何其他 字符集或編碼。 ICU的 轉換表基於IBM收集的數十年的課程 的charset 數據,並且是最爲全面的可用於任何地方的 。
歸類:根據比較給 一個 特定語言,區域或國家 的公約和標準字符串。 ICU的排序規則基於 Unicode排序算法加上 特定於區域的比較規則 Common Locale Data Repository, 這種類型的 數據的全面來源。
格式:格式化數字,日期, 時間和貨幣金額根據 所選語言環境的約定。 這包括翻譯月份和 日名稱到所選擇的語言, 選擇合適的縮寫, 排序字段正確等,這 數據也來自通用語言環境 數據存儲庫。
時間計算:多種類型的 日曆提供超出 傳統的公曆日曆。一 徹底組時區計算 提供的API。
Unicode支持:ICU密切跟蹤 Unicode標準,所有的Unicode許多字符 性能提供方便 接入,統一 規範化,案例摺疊以及由 Unicode標準規定的其他 基本操作。
正則表達式:ICU的常規 表達式完全支持Unicode 同時提供極具競爭力的 性能。
的雙向:用於處理包含的左到右 (英文版),從右到左(阿拉伯或 希伯來語)數據的混合物文本 支持。
文本邊界:找到的位置的單詞,句子,段落 內 一定範圍的文本,或識別位置 顯示文本時,這將是適合於線 包裝。
還有更多。詳情請參閱ICU用戶指南。
感謝您的答覆,任何示例幫助轉換ebcdic爲utf8從文件中讀取字符? – SNL
不在java中。 .Net世界有System.Text.Encoding類,它支持不同編碼之間的轉換。微軟框架對[某些] EBCDIC編碼,但不支持IBM 937不知道什麼單(開源.NET)支持......或者這將是多麼難寫一個自定義編碼。 .Net的方式是讀取一組八位字節並將其傳遞給編碼器/解碼器,並獲得一個字符串作爲回報。由於需要處理單字節和雙字節模式之間的移入和移出,EBCDIC雙字節填充使其複雜化。 –
這一個initally沒有工作。當我導入icu4j字符集庫和reran時,它似乎運行良好。然而,我的中文ebcdic chars似乎沒有得到應有的轉變?有什麼想法嗎? – SNL
原來的字符是這樣的: 凧刡凮剭勄剭刣剭刡匎刪僔働っ牼僉僌僑僒匎刪僔働っ牼僉僌僑僒??? 轉換後,我得到的東西,如: ブイピーシーエーインクVPㄣLOSTンクVPㄣLOSTブイピーシーエーインク – SNL
@SNL:我首先想到的是,你確定輸入是IBM937(CP937)?還有一些其他的IBM EBCDIC中文字符頁面。有CP1371,CP950,CP964和CP948。 –