在java中解析中文字符显示奇怪的行为

时间:2013-10-29 09:22:59

标签: java string character-encoding chinese-locale

我有一个csv文件,其中有一些字段包含中文字符串。 不幸的是我不知道这个输入csv文件的编码是什么。 我正在尝试读取此输入csv并使用其中的选择性字段,我正在制作一个html和另一个csv文件作为输出。

在阅读csv输入时,我尝试了列表http://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html中的所有编码,其描述中提到了中文。 并发现如果我使用

InputStreamReader read = new InputStreamReader(filepath,"GB18030");

用于阅读csv 和

OutputStreamWriter osW=new OutputStreamWriter(objBufferedOutputStream,"UTF-16");

对于编写html和csv,我的输出不会显示奇怪的字符。

但是,有两个问题:

  1. 输出显示的字符串与输入完全不同! 我的意思是,即使我没有对我的代码中的任何字符串进行任何处理,输出也不会在输入csv的任何字段中找到。
  2. 例如,我的输入在字段编号8上有一个中文字符串:陈真珍。 但我的输出html有类似的东西:闄堢湡鐝 对应于输入字段编号8.

    1. 你可以看到,有一个问号,即输出中来自unicode的替换字符闄堢湡鐝
    2. 我请你帮助我追踪这里可能出错的地方......

      PS:Aiso,我检查了谷歌的翻译,发现,输入字符串陈真珍意味着一些陈真珍

      及其对应的输出字符串闄堢湡鐝 表示称为Yaobaoyujue的东西 所以人物的意义和表现也有差异。

2 个答案:

答案 0 :(得分:2)

该输出表示您的输入不是GB18030编码。

另外:请检查并仔细检查您查看文件的方式:程序使用哪种编码打开文件,特别是输入文件。通常文本文件(和CSV文件)不附带显示其编码的元数据,因此编辑必须猜测并且猜测很容易出错。

答案 1 :(得分:0)

在阅读/书写汉字时请保持一致。由于某些中文字符可能无法用所有编码表示,例如GBK, GB18030等。

您可以尝试使用 UTF-8 来处理中文字符。