我正在尝试在utf8中读取包含希腊词的文件 使用以下代码
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
while((line = reader.readLine()) != null){
tokenizer = new StringTokenizer(line, delimiter);
while(tokenizer.hasMoreTokens()){
currentToken = tokenizer.nextToken();
map.put(currentToken, 1);
}
}
在我寻找的每个论坛上,我看到了new FileInputStream(file), "UTF8")
但打印结果仍然与����
P.S。当我从代码中打印一个包含希腊词的变量时,打印成功,这意味着问题在文件读取。
任何想法?
答案 0 :(得分:2)
这里有一些过于专业的人。我再次提醒你,我们是人类,而不是编译器!我又在这里"权力"你被邮寄删除了!我为出生在民主的发源地,尊重其他讨论者而感到自豪!你不尊重任何事情" guru"人...
PS:是的,我知道你再次传票,但谁真正关心呢?答案 1 :(得分:1)
没有" UTF8" Java中的charset。正确的字符集名称为" UTF-8":
new InputStreamReader(new FileInputStream(file), "UTF-8"))
或者使用StandardCharsets.UTF_8
来避免任何歧义:
new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))
话虽如此,请确保该文件实际上是UTF-8编码的。如果前面有一个UTF-8 BOM,则必须从文件本身中删除它,或者在读取文件之前手动跳过它,然后再读取这些行。 Java读者无法自动识别或跳过BOM。
答案 2 :(得分:1)
使用它进行正确的转换 - 这个是从iso-8859-1到utf-8:
public String to_utf8(String fieldvalue) throws UnsupportedEncodingException{
String fieldvalue_utf8 = new String(fieldvalue.getBytes("ISO-8859-1"), "UTF-8");
return fieldvalue_utf8;
}