UTF-8编码CSV文件

时间:2018-07-31 16:43:13

标签: java encoding utf-8

我有一个CSV文件,使用Excel将其另存为CSV UTF-8编码。 我的Java代码将文件读取为字节数组

然后

String result = new String(b, 0, b.length, "UTF-8");

但是当保存到数据库时,内容“蒙特利尔”变为“蒙特?al”,这可能是什么问题?

环境为unix,

-bash-4.1$ locale
LANG=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

顺便说一句,当我运行代码并在DB中看到正确的“蒙特利尔”时,它可以在Windows机器上运行。因此,我的猜测是该环境具有一些默认的语言环境设置,可以强制使用dedault编码。

谢谢

2 个答案:

答案 0 :(得分:1)

我没有完整的代码,但是我尝试了以下代码,它对我有用:

    String x = "c:/Book2.csv";
    BufferedReader br = null;

    try{
        br = new BufferedReader(new InputStreamReader(new FileInputStream(
                x), "UTF8"));
        String b;
        while ((b = br.readLine()) != null) {
            System.out.println(b);

        }
    } finally {
        if (br != null){
            br.close();
        }
    }

如果您在控制台上看到“ Montr?al”字样,请不要担心。这并不意味着该程序无法运行。现在,您可能要检查控制台是否支持打印UTF-8字符。因此,您可以进行调试并检查变量,以检查是否具有所需的内容。

如果您在调试中看到正确的值,它会显示“?”在输出中,您可以放心String变量具有正确的值,并且可以根据需要将其写回到任何文件或DB。

如果看到“?”当查询数据库时,您可能使用的工具无法正确打印输出。尝试通过在代码中放入调试来读取Java代码中的DB值进行检查。我通常使用腻子查询数据库以正确查看双字节字符。这就是我所拥有的,希望对您有所帮助。

答案 1 :(得分:-2)

您必须使用ISO / IEC 8859,而不是UTF-8,如果您查看Wikipedia页面上的字符编码列表,就会了解其中的区别。 基本上,UTF-8是西方国家使用的commom编码...

此外,您可以检查终端编码,也许是问题所在。