这是我的来源:
public static void main(String[] args)
{
File file = null;
Scanner scan = null;
Charset cr = null;
Map<String, Charset> map = null;
try
{
file = new File("D:\\Tests\\New folder (2)\\doncho_encode.txt");
map = cr.availableCharsets();
for (Map.Entry<String, Charset> encoding : map.entrySet())
{
String s = encoding.getKey();
scan = new Scanner(file, s);
// System.out.println(s);
}
System.out.println(scan.nextLine());
}
catch (FileNotFoundException | NullPointerException | IllegalArgumentException e)
{
e.printStackTrace();
}
catch (NoSuchElementException e)
{
System.out.println("Try new encoding");
}
finally
{
if (scan != null)
{
scan.close();
}
}
}
我需要将不同的字符集值与
进行比较scan = new Scanner(file, s);
行,当它找到正确使用它时。在我的例子中,我在catch子句中捕获“NoSuchElementException”。
据我所知,那个方法availableCharsets()用所有编码返回给我SortedMap,但是为什么我比较键来“扫描”异常被捕获?怎么看起来像正确的迭代?
在我的示例中,文件中的文本采用“UTF-16LE”编码。
答案 0 :(得分:0)
(我不是使用java.util.Scanner
的专家,但......)
在查看the Javadoc for the class时,我可以看到:
NoSuchElementException
nextLine
method which actually does 基于此,我猜你的问题实际上并不是扫描器无法识别availableCharsets
返回的字符集。但实际上是
程序无法从文件中读取下一行(第一行)。
顺便说一下 - 如果你在e.printStackTrace();
旁边添加System.out.println("Try new encoding");
,我所说的并建议你关注的内容最有可能更明显。
TLDR :我怀疑这次尝试的原因与您认为的不同。