Java bug?无法直接使用Scanner读取GB2312文件
发布时间:2020-12-15 02:30:28 所属栏目:Java 来源:网络整理
导读:我有一个GB3212编码的文件(中文).文件从这里下载 http://lingua.mtsu.edu/chinese-computing/statistics/char/list.php?Which=MO,与Windows下的wget一样,并存储到ModernChineseCharacterFrequencyList.html文件名中. 下面的代码演示了Java如何以一种方式读取
我有一个GB3212编码的文件(中文).文件从这里下载
http://lingua.mtsu.edu/chinese-computing/statistics/char/list.php?Which=MO,与Windows下的wget一样,并存储到ModernChineseCharacterFrequencyList.html文件名中.
下面的代码演示了Java如何以一种方式读取它并且能够与另一种方式结束. 即,如果使用scanner =新扫描程序(src,“GB2312”)创建扫描程序,则代码不起作用.如果Scanner是使用scanner = new Scanner(新的FileInputStream(src),“GB2312”)创建的,那么它就能正常工作. 分隔符图案线只显示毛刺剩余的另一个选项. public static void main(String[] args) throws FileNotFoundException { File src = new File("ModernChineseCharacterFrequencyList.html"); //Pattern frequencyDelimitingPattern = Pattern.compile("<br>|<pre>|</pre>"); Scanner scanner; String line; //scanner = new Scanner(src,"GB2312"); // does NOT work scanner = new Scanner(new FileInputStream(src),"GB2312"); // does work //scanner.useDelimiter(frequencyDelimitingPattern); while(scanner.hasNext()) { line = scanner.next(); System.out.println(line); } } 这是一个小故障还是设计行为? UPDATE 当代码运行时,它只读取所有令牌.如果它不起作用,它会取消大约在中间读取,没有异常或错误消息. 在休息处找不到奇点.也没有像2 ^ 32这样的“神奇”数字出现. 更新2 最初的行为是在Windows上使用Sun的JavaSE 1.6发现的 现在在Ubuntu上也发现了与OpenJDK 1.6.0_23相同的行为 解决方法
我现在无法测试我的答案,但JDK 6文档根据您使用的API为e??nconding建议了不同的规范名称:io或nio
JDK 6 Supportted Encondings 也许,您应该使用“EUC_CN”而不是使用“GB2312”,它是Java I / O的建议规范名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |