我正在尝试创建一个“XLS”文件,但它将作为 txt 文件提供。 (这意味着当您右键单击并选择在窗口中打开并选择记事本时,它将显示为制表符分隔的文本文件。)
这是我尝试创建的示例文件(我必须删除一些条目,因为它很大)。当你用notepad++打开文件并选择UTF-8编码时,你会看到“隐藏字符”,如下图所示:
如果您可以看到 xA0,它是 IBM I 系列 (AS400) 的 COBOL 程序生成的隐藏字符之一。
但是,如果你看到那些黄色突出的部分,那也是AS400的一个特点。它的声明如下:
DCL VAR(&FLDDLM) TYPE(*CHAR) LEN(1) VALUE(X'05')
现在我可以使用下面的测试代码生成 xA0:
List<Object[]> data = new ArrayList<>();
data.add(new Object[] { "AS1", "185914", "NETHERLANDS", "NL", "", "202023714", "2023714", "27-AUG-2022",
"03-FEB-2023", "", "", "00000000", "IF-ADAMAS", "", "PTF166091NL00",
"P166091NL00", "", "", "", "", "IF ADAMAS B V" });
data.add(new Object[] { "AS1", "20200893", "GERMANY", "DE", "", "13801864.3", "2915188",
"05-NOV-2022", "22-FEB-2023", "R80049", "10", "00000434", "MICRONIT M", "",
"PTF124241DEEP", "P118354DEEP", "", "", "", "",
"MICRONIT MICROFLUIDICS B.V." });
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.XLS"),"windows-1252");
writer.write(
"\"Client\"\t\"Case Number\"\t\"Country\"\t\"WIPO\"\t\"Subcase\"\t\"Application Number\"\t\"Patent Number\"\t\"Due Date\"\t\"Paid Date\"\t\"Invoice Number\"\t\"Annuity Number\"\t\"Invoice Amount\"\t\"Client/Division\"\t\"Client Ref(Inv)\"\t\"Client Ref#1(Ctry)\"\t\"Client Ref#2(Ctry)\"\t\"Attorney(Inv)\"\t\"Attorney(Ctry)\"\t\"Remarks\"\t\"Local Title\"\t\"Title Holder\"\n");
for (Object[] row : data) {
for (int i = 0; i < row.length; i++) {
writer.write("\"" + "\u00a0" + row[i].toString() + "\"");
if (i < row.length - 1) {
writer.write("\t");
}
}
writer.write("\n");
}
writer.close();
System.out.println("Done");
}
我必须将 "windows-1252"
放入 FileOutputStream("output.XLS"),"windows-1252");
中以生成 xA0
与 "\u00a0"
就像您在上图中看到的那样。然而,
DCL VAR(&FLDDLM) 类型(*CHAR) LEN(1) 值(X'05')
我在
中放入了“\u0005”
而不是简单的“\t”
if (i < row.length - 1) {
writer.write("\t");
}
它给了我ENQ
,如下图所示
这不是我想要达到的目标。我想要实现像第一张图一样的效果。
因此,有人可以告诉我 X'05'
字段分隔符的等效项是什么吗?我应该改变什么?
有人可以帮我解决这个问题吗?
我将不胜感激!
最佳答案
您可能需要 Google ASCII 表和 EBCDIC 表。这样您就可以自己确定这些映射。但无论如何,你可以找到一个 EBCDIC 表 here和 ASCII 表 here 。如果你查找TAB或水平制表符,你会发现它在EBCDIC中是x05,在ASCII中是x09。由于 windows-1252 是 ASCII 代码,因此您应该将\u0009 加载到文件中。
关于java - 分离字符生成从 IBM i 系列 (AS400) 转换为 Java 文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75899630/