Tôi đang có một tệp phẳng được lấy từ bảng Db2, tệp phẳng chứa các bản ghi ở cả định dạng char cũng như định dạng thập phân được đóng gói. Cách chuyển đổi dữ liệu được đóng gói thành chuỗi java.is có bất kỳ cách nào để chuyển đổi toàn bộ tệp phẳng thành định dạng ASCII.chuyển đổi định dạng EBCDIC thành định dạng ASCII?
Trả lời
Đọc tệp dưới dạng Chuỗi, viết dưới dạng EBCDIC. Sử dụng OutputStreamWriter và InputStreamWriter và cung cấp mã hóa trong hàm tạo.
EBCDIC là họ mã hóa. Bạn sẽ cần phải biết thêm chi tiết mà EBCDIC mã hóa bạn đang sau.
Java có một số supported encodings, bao gồm:
- IBM500/CP500 - 500V1 EBCDIC
- x-IBM834/Cp834 - IBM EBCDIC DBCS-Hàn Quốc duy nhất (double-byte)
- IBM1047/Cp1047 - Ký tự Latinh-1 được đặt cho máy chủ EBCDIC
Hãy thử những điều đó và xem những gì bạn nhận được. Một cái gì đó như:
InputStreamReader rdr = new InputStreamReader(new FileInputStream(<your file>), java.nio.Charset.forName("ibm500"));
while((String line = rdr.readLine()) != null) {
System.out.println(line);
}
Sau PAP, CP037 là mã hóa EBCDIC của Hoa Kỳ.
Ngoài ra, hãy xem dự án JRecord. Nó cho phép bạn đọc một tệp với mô tả Cobol hoặc Xml và sẽ xử lý EBCDIC và Comp-3.
Cuối cùng đây là một thói quen để chuyển đổi byte thập phân đóng gói để String thấy phương pháp getMainframePackedDecimal trong Conversion
Chia sẻ một số mẫu mã của tôi để bạn tham khảo:
package mypackage;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
public class EtoA {
public static void main(String[] args) throws UnsupportedEncodingException {
System.out.println("########");
String edata = "/ÂÄÀ"; //Some EBCDIC string ==> here the OP can provide the content of flat file which the OP pulled from DB2 table
System.out.println("ebcdic source to ascii:");
System.out.println("ebcdic: " + edata);
String ebcdic_encoding = "IBM-1047"; //Setting the encoding in which the source was encoded
byte[] result = edata.getBytes(ebcdic_encoding); //Getting the raw bytes of the EBCDIC string by mentioning its encoding
String output = asHex(result); //Converting the raw bytes into hexadecimal format
byte[] b = new BigInteger(output, 16).toByteArray(); //Now its easy to convert it into another byte array (mentioning that this is of base16 since it is hexadecimal)
String ascii = new String(b, "ISO-8859-1"); //Now convert the modified byte array to normal ASCII string using its encoding "ISO-8859-1"
System.out.println("ascii: " + ascii); //This is the ASCII string which we can use universally in JAVA or wherever
//Inter conversions of similar type (ASCII to EBCDIC) are given below:
System.out.println("########");
String adata = "abcd";
System.out.println("ascii source to ebcdic:");
System.out.println("ascii: " + adata);
String ascii_encoding = "ISO-8859-1";
byte[] res = adata.getBytes(ascii_encoding);
String out = asHex(res);
byte[] bytebuff = new BigInteger(out, 16).toByteArray();
String ebcdic = new String(bytebuff, "IBM-1047");
System.out.println("ebcdic: " + ebcdic);
//Converting from hexadecimal string to EBCDIC if needed
System.out.println("########");
System.out.println("hexcode to ebcdic");
String hexinput = "81828384"; //Hexadecimal which we are converting to EBCDIC
System.out.println("hexinput: " + hexinput);
byte[] buffer = new BigInteger(hexinput, 16).toByteArray();
String eout = new String(buffer, "IBM-1047");
System.out.println("ebcdic out:" + eout);
//Converting from hexadecimal string to ASCII if needed
System.out.println("########");
System.out.println("hexcode to ascii");
String hexin = "61626364";
System.out.println("hexin: " + hexin);
byte[] buff = new BigInteger(hexin, 16).toByteArray();
String asciiout = new String(buff, "ISO-8859-1");
System.out.println("ascii out:" + asciiout);
}
//This asHex method converts the given byte array to a String of Hexadecimal equivalent
public static String asHex(byte[] buf) {
char[] HEX_CHARS = "abcdef".toCharArray();
char[] chars = new char[2 * buf.length];
for (int i = 0; i < buf.length; ++i) {
chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
chars[2 * i + 1] = HEX_CHARS[buf[i] & 0x0F];
}
return new String(chars);
}
}
Tôi nghĩ rằng nó sẽ hữu ích hơn cho OP và khách truy cập hơn nữa, khi bạn thêm một số giải thích cho sự căng thẳng của bạn. – reporter
- 1. Cách chuyển đổi từ EBCDIC sang ASCII trong C# .net
- 2. Chuyển đổi ngày giờ thành định dạng được chỉ định
- 3. Chuyển đổi khóa công khai ở định dạng SubjectPublicKeyInfo thành định dạng RSAPublicKey java
- 4. Cách chuyển đổi chuỗi định dạng chuẩn .NET thành chuỗi định dạng Excel
- 5. Chuyển đổi định dạng ngày trong bash
- 6. Chuyển đổi Android sang định dạng số
- 7. Chuyển đổi chuỗi ở định dạng ddMMyyyy thành DateTime
- 8. ngày sql chuyển đổi thành định dạng chuỗi
- 9. Chuyển đổi định dạng thời gian thành số bằng R
- 10. Chuyển đổi ngày thành định dạng "dd-MMM-yyyy" C#
- 11. Chuyển đổi chuỗi thành ngày, định dạng: "dd.mm.yyyy"
- 12. Chuyển đổi C# DateTime thành định dạng MongoDB
- 13. Chuyển đổi dữ liệu có thể định dạng thành PDF
- 14. Chuyển đổi định dạng ngày giờ thành giây
- 15. chuyển đổi chuỗi thành định dạng java.util.date trong java
- 16. Chuyển đổi ngày PHP thành định dạng ngày javascript
- 17. chuyển đổi mảng POST thành định dạng json
- 18. Chuyển đổi Lịch thành XMLGregorianCalendar với định dạng cụ thể
- 19. Chuyển đổi chuỗi được định dạng PEM thành java.security.cert.X509Certificate
- 20. Chuyển đổi chuỗi thành định dạng ngày trong android
- 21. Định dạng ngày Perl/regex chuyển đổi
- 22. Định dạng lại Dữ liệu Bảng điều khiển Định dạng Rộng thành Định dạng Dài
- 23. ngày Chuyển đổi sang định dạng YYYYMM
- 24. chuyển đổi sang định dạng Z T
- 25. chuyển đổi định dạng tiff sang jpg
- 26. Chuyển đổi định dạng âm thanh
- 27. Chuyển đổi DateTime sang định dạng UK
- 28. Chuyển đổi ngày JSON định dạng
- 29. Chuyển đổi tệp ASCII nguồn sang dạng JPEG
- 30. Cách thực hiện nhiều nhất để chuyển đổi định dạng ngày giờ sang định dạng Int
Cần lưu ý rằng điều này danh sách là các mã hóa được hỗ trợ bởi * Oracle JDK *. Danh sách mã hóa [cần được hỗ trợ bởi ** tất cả ** JVM ngắn hơn nhiều] (http://download.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html#standard). –
Điểm rất tốt! – pap