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



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

有什么想法吗?

这里有些人过于专业。我再次提醒你,我们是人类,而不是编译器!我又在这里"权力"你删帖了!我为自己出生在民主的发源地而感到骄傲,尊重其他讨论者!你不尊重任何"大师"的家伙。。。

PS:是的,我知道你再次散布投票,但谁真的在乎呢?

Java中没有"UTF8"字符集。正确的字符集名称是"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。

使用这个进行正确的转换-这个转换是从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;
}

最新更新