Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将日文汉字从Shift JIS转换为UTF-8_Java_Apache Flex_Utf 8_Character Encoding_Shift Jis - Fatal编程技术网

Java 将日文汉字从Shift JIS转换为UTF-8

Java 将日文汉字从Shift JIS转换为UTF-8,java,apache-flex,utf-8,character-encoding,shift-jis,Java,Apache Flex,Utf 8,Character Encoding,Shift Jis,我正在尝试读取带有一些日语文本的CSV文件,并将该文件中的一些数据写入DB。CSV是通过一些我不太熟悉的Flex代码上传的。但在我的后端,我有一个简单的byte[]和文件内容。我正在使用以下代码: //content is an array of bytes, returned by Flex side ByteArrayInputStream in = new ByteArrayInputStream(content); BufferedReader br = new BufferedRead

我正在尝试读取带有一些日语文本的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变量时,我只看到问号而不是日文汉字(特别是,我在日文汉字上测试过它)裵). 其他日文字符似乎没有问题(例如〒字符)。在调试窗口(以及稍后在my DB中)中,它显示如下: 〒���

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

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

根据我发现的一个描述,JISAutoDetect应该做到以下几点:“检测并转换Shift-JIS、EUC-JP、ISO 2022 JP(仅转换为Unicode)”。因此它的工作做得很好

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

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

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


2) 因此,如果上面的一切都是正确的,那么在Java中处理Shift JIS文件可能会有一些错误。尽管很难相信这一点。

经过一些研究和反复尝试失败后,我注意到,如果我指定“jisautodect”而不是“Shift JIS”作为InputStreamReader的参数,那么所有汉字字符都变得可读

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

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

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

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

2) 因此,如果上面的一切都是正确的,那么在Java中处理Shift JIS文件可能会有一些错误。虽然很难相信这一点