我正在尝试使用一些日语文本读取CSV文件,并将一些数据从该文件写入DB。 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变量时-我只看到问号而不是日文汉字(特别是我已经在汉字Kan上测试过)。其他日语字符似乎还可以(例如〒字符)。在调试窗口中(以后在我的数据库中)显示如下:
〒���

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

最佳答案

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

从我发现的here的描述中,JISAutoDetect应该执行以下操作:“检测并从Shift-JIS,EUC-JP,ISO 2022 JP转换(仅转换为Unicode)”。因此,它做得很好。

从那里我几乎看不到任何后果:

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

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

2)因此,如果以上所有内容均正确,则在Java中处理Shift-JIS文件时可能会出现一些错误。尽管很难相信这一点。

08-28 11:57