1

我正在尝试使用一些日文文本读取 CSV 文件,并将该文件中的一些数据写入数据库。CSV 是通过一些我不太熟悉的 Flex 代码上传的。但在我的后端,我有简单的 byte[] 文件内容。我正在使用以下代码:

//content is an array of bytes, returned by Flex side
ByteArrayInputStream in = new ByteArrayInputStream(content);
BufferedReader br = new BufferedReader(new InputStreamReader(in, Const.ENCODING_SHIFT_JIS));
String strLine;
try {
    while (true) {
    strLine = br.readLine();
    //processing CSV line by line and eventually writing data to DB
...

当我调试 strLine 变量时 - 我只看到问号而不是日文汉字字符(特别是,我已经在汉字字符裵上测试过它)。其他日文字符似乎没问题(例如〒字符)。在调试窗口中(后来在我的数据库中)它看起来像这样:〒���

如果我在做同样的事情,但在我的代码中使用 UTF-8 和 Const.UTF-8 而不是 Const.ENCODING_SHIFT_JIS 文件编码 - 一切正常。但客户需要 Shift-JIS 支持。也许有人可以告诉我如何解决这个问题,或者至少在哪个特定领域(flex、java、shift-jis 编码本身......)它可能是?

4

1 回答 1

0

经过一些研究和 try\fail 迭代后,我注意到如果我指定“JISAutoDetect”而不是“Shift-JIS”作为 InputStreamReader 的参数 - 那么所有汉字字符都变得可读。

根据我在这里找到的描述,JISAutoDetect 应该执行以下操作:“检测并从 Shift-JIS、EUC-JP、ISO 2022 JP 转换(仅转换为 Unicode)”。所以它的工作做得很好。

从那里我可以看到一些后果:

1)从JISAutoDetect描述中我可以假设,理论上可能,我拥有的文件编码 - 实际上不是Shift-JIS。这就是为什么我在从文件中读取数据作为 Shift-JIS 后出现所有这些乱码的原因。例如,如果它是 EUC-JP,那么 JISAutoDetect 会检测到这一点并正确转换所有内容。

但是我已经从带有日文版 Windows 的客户端获得了这个文件,该文件应该具有本机编码 Shift-JIS(至少我的客户端如此断言)。我还尝试使用在线转换工具将存储在 UTF-8 编码文件中的相同字符转换为 Shift-JIS。通过我的代码后,这给了我同样的乱码字符。

2) 因此,如果以上所有内容都正确,那么在 Java 中处理 Shift-JIS 文件时可能存在一些错误。虽然很难相信这一点。

于 2015-07-01T21:07:31.573 回答