2015-03-31 142 views
2

我试图读取包含在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") 但仍然打印的结果是这样的����

ps当我从代码中打印一个包含希腊字的变量时,打印是成功的,这意味着问题出现在文件读取中。

有什么想法?

+1

是否使用UTF8而不是UTF8什么帮助? - >显然不是 – 2015-03-31 23:53:18

+0

如果使用['Files.newBufferedReader']创建'BufferedReader',它是否工作(http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files的.html#newBufferedReader-java.nio.file.Path-java.nio.charset.Charset-)? – fabian 2015-03-31 23:54:06

+0

不幸的是这两个想法都没有工作 – 2015-03-31 23:56:43

回答

0

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。

+0

,这也不起作用 – 2015-04-01 08:57:10

1

这里有一些太专业。我再次提醒你,我们是人类,而不是编译器!我在这里再次“权力”你通过邮件删除!我为在民主的诞生地出生而自豪,尊重其他讨论者!你不尊重任何“大师”家伙...

PS:是的,我知道你再次传播票,但谁真的在乎?

0

使用此正确converstion - 这一个是从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; 
}