如何使用Charset类和availableCharsets()方法

时间:2017-01-25 09:22:03

标签: java encoding character-encoding iteration

这是我的来源:

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”编码。

1 个答案:

答案 0 :(得分:0)

(我不是使用java.util.Scanner的专家,但......)

在查看the Javadoc for the class时,我可以看到:

基于此,我猜你的问题实际上并不是扫描器无法识别availableCharsets返回的字符集。但实际上是 程序无法从文件中读取下一行(第一行)。

顺便说一下 - 如果你在e.printStackTrace();旁边添加System.out.println("Try new encoding");,我所说的并建议你关注的内容最有可能更明显。

TLDR :我怀疑这次尝试的原因与您认为的不同。