Java UTF-8编码CSV文件
我有一个CSV文件,它使用Excel保存为CSV UTF-8编码。 我让java代码以字节数组的形式读取文件 然后 但不知何故,当保存到DB时,Montréal的内容变成了Montréal,这可能是什么问题 环境是unix,具有: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= 顺便说一句,当我运行代码并在
-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();
}
}