Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 UTF-8编码CSV文件_Java_Encoding_Utf 8 - Fatal编程技术网

Java UTF-8编码CSV文件

Java UTF-8编码CSV文件,java,encoding,utf-8,Java,Encoding,Utf 8,我有一个CSV文件,它使用Excel保存为CSV UTF-8编码。 我让java代码以字节数组的形式读取文件 然后 但不知何故,当保存到DB时,Montréal的内容变成了Montré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= 顺便说一句,当我运行代码并在

我有一个CSV文件,它使用Excel保存为CSV UTF-8编码。 我让java代码以字节数组的形式读取文件

然后

但不知何故,当保存到DB时,Montréal的内容变成了Montré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中看到正确的Montréal时,它可以在我的windows机器上工作。因此我猜环境中有一些默认的区域设置,强制使用dedault编码


谢谢,您必须使用ISO/IEC 8859,而不是UTF-8,如果您查看第页上的字符编码列表,您将了解其中的差异。 基本上,UTF-8是西方国家常用的编码


另外,您可以检查您的终端编码,可能存在问题。

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

    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();
        }
    }
如果你看到你的控制台上印着蒙特勒阿尔,别担心。这并不意味着程序不起作用。现在,您可能需要检查控制台是否支持打印UTF-8字符。因此,您可以进行调试并检查变量,以检查其是否符合您的要求

如果在调试中看到正确的值,它会打印一个?在输出中,您可以确信字符串变量具有正确的值,并且可以根据需要将其写回任何文件或数据库


如果你看到了?查询数据库时,可能使用的工具未正确打印输出。尝试在java代码中读取DB值,并在代码中加入调试,以进行检查。我通常使用putty查询数据库以正确查看双字节字符。这就是我的全部,希望能有所帮助

文件不是UTF-8编码的,或者输出结果时出现问题。我如何确保它是UTF-8编码的?您可以检查文件中的字节,例如,使用hexdump-C filename我更新了我的描述,在数据库中找到了Montr?al。不是控制台。当我运行代码并在DB中看到正确的Montréal时,它在我的windows计算机上工作。
    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();
        }
    }