У меня есть файл в кодировке GB3212 (китайский). Файл загружается отсюда http://lingua.mtsu.edu/chinese-computing/statistics/char/list.php?Which=MO как есть с wget в Windows и сохраняется в файле ModernChineseCharacterFrequencyList.html.
Приведенный ниже код демонстрирует, как Java не может прочитать его до конца одним способом, а может - другим.
А именно, если Scanner
создается с scanner = new Scanner(src, "GB2312")
, код не работает. И если Scanner
создается с scanner = new Scanner(new FileInputStream(src), "GB2312")
, то он работает.
Линии рисунка-разделителя просто показывают другой вариант, с которым сохраняется сбой.
<code>public static void main(String[] args) throws FileNotFoundException {
File src = new File("ModernChineseCharacterFrequencyList.html");
//Pattern frequencyDelimitingPattern = Pattern.compile("<br>|<pre>|
");
Сканер сканер;
Струнная линия;
// scanner = new Scanner (src, "GB2312"); // не работает
scanner = новый сканер (новый FileInputStream (src), "GB2312"); // работает
//scanner.useDelimiter(frequencyDelimitingPattern);
while (scanner.hasNext ()) {
line = scanner.next ();
System.out.println (линия);
}
}
Это глюк или нестандартное поведение?
UPDATE
Когда код работает, он просто читает все токены до конца. Когда он НЕ работает, он отменяет чтение примерно посередине без каких-либо исключений или сообщений об ошибках.
Сингулярности на месте разрыва не обнаружено. Также не проявилось никаких «магических» чисел, таких как 2 ^ 32.
ОБНОВЛЕНИЕ 2
Первоначально такое поведение было обнаружено в Windows с SunSESE 1.6
.
И теперь такое же поведение также наблюдается в Ubuntu с OpenJDK 1.6.0_23