Это шестнадцатеричные байты текста в EBCDIC, кодировке AS / 400.
static String fromEbcdic(String hex) {
int m = hex.length();
if (m % 2 != 0) {
throw new IllegalArgumentException("Must be even length");
}
int n = m/2;
byte[] bytes = new byte[n];
for (int i = 0; i < n; ++i) {
int b = Integer.parseInt(hex.substring(i*2, i*2 + 2), 16);
bytes[i] = (byte) b;
}
return new String(bytes, Charset.forName("Cp500"));
}
, проходящий "C6C9D9C540C3D6D4D4C5D9C3C9C1D34040404040".
Преобразование файла с Cp500 как кодировка:
Path path = Paths.get("...");
List<String> lines = Files.readAllLines(path, Charset.forName("Cp500"));
Для концов строк, которые в AS / 400 имеют NEL-символ, U + 0085, можно использовать регулярное выражение:
content = content.replaceAll("\\R", "\r\n");
Регулярное выражение \R
будет соответствовать ровно одному разрыву строки, будь то \r, \n, \r\n, \u0085
.