用UTF8字符集读取的希腊字符打印为

时间:2015-03-31 23:42:16

标签: java encoding utf-8

我正在尝试在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。当我从代码中打印一个包含希腊词的变量时,打印成功,这意味着问题在文件读取。

任何想法?

3 个答案:

答案 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;
}