1

我的 java 程序正在尝试读取文本文件(大型机 VSAM 文件转换为平面文件)。我相信这意味着,文件以 EBCDIC 格式编码。

com.ibm.jzos.FileFactory.newBufferedReader(fullyQualifiedFileName, ZFile.DEFAULT_EBCDIC_CODE_PAGE);用来打开文件。

并用于String inputLine = inputFileReader.readLine()读取一行并将其存储在 java 字符串变量中以进行处理。当存储在 String 变量中时,我读取了该文本变为 unicode。

存储在 java 字符串变量中时,如何确保内容不损坏?

4

2 回答 2

3

字符集解码器会将字节映射到其正确的字符串 Unicode。反之亦然。

唯一的问题是 BufferedReader.readLine 将删除行尾(也是 EBCDIC 行尾 NEL 字符,\u0085- 也是公认的 Unicode 换行符)。因此,在编写时自己编写 NEL,或设置系统行分隔符属性。

没有什么比用 256 个 EBCDIC 字符编写单元测试并来回转换它们更容易的了。

于 2017-08-25T12:37:11.010 回答
2

如果你已经用正确的字符集读取了文件(这是这里最大的假设),那么 Java 本身内部使用 Unicode 也没关系,Unicode 包含 EBCDIC 的所有字符。

字符集指定字符(代码点)和一个或多个字节之间的映射。一个文件只不过是一个字节流,如果你应用正确的字符集,那么正确的字符就会映射到内存中。

假设字节 1 映射到字符集 X 中的“A”以及 UTF-16 中的字节 0 和 65,然后使用字符集 X 读取包含字节 1 的文件将使系统读取字符“A”,即使该系统在内存使用字节 0 和 65 来存储该字符。

但是,没有办法知道您是否使用了正确的字符集,除非您现在明确指出实际结果应该是什么。

于 2017-08-25T12:35:26.783 回答