1

我有一个 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 的任何字段中都找不到输出。

例如,我的输入有一个中文字符字符串:字段编号 8 上的陈真珍。但我的输出 html 有类似:闄堢湡鐝’,对应于输入字段编号 8。

  1. 如您所见,有一个问号,即输出中的unicode替换字符闄堢湡鐝

我请求你帮我追踪这里可能出现的错误......

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

而其对应的输出字符串闄堢湡鐝’的意思就是所谓的药宝玉觉,所以在含义和字符的表示上也有区别。

4

2 回答 2

2

该输出意味着您的输入不是 GB18030 编码。

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

于 2013-10-29T09:39:55.460 回答
0

读/写汉字时请保持编码一致。由于某些汉字可能无法用所有的编码来表示,例如 GBK、GB18030 等。

您可以尝试使用UTF-8 编码来处理汉字。

于 2013-10-29T09:54:14.157 回答