У меня есть файл с китайскими символами. Я написал код Java, который читает этот файл и записывает его в другой файл, используя FileInputStream/FileOutputStream (Byte Stream), и он работает нормально. Но проблема возникает, когда я использую поток символов FileReader/FileWriter.Чтение/запись символов FileReader и FileWriter не умеют читать/писать китайский файл, но байт Reader/Writer работает нормально
Теперь вопрос заключается в том, что поток байтов, который использует только восемь бит, способен читать китайские символы, потому что то, что я знаю, это то, что поток байтов считывает/записывает один байт за один раз и использует один байт, мы можем распознавать только ASCII символов (т.е. всего 128 символов). Поток символов (FileReader/FileWriter), который использует 16 бит для чтения/записи и имеет возможность читать/писать китайский символ, не способен правильно читать/записывать файл.
вы должны показать нам свой код, * но * обратите внимание, что 'FileInputStream' не волнует, что ваш файл хранит, он копирует исходные байты; когда вы открываете файл, который он скопировал на инструмент, который вы используете (скажем, блокнот), применяет кодировку, которая преобразует эти байты в текст, читаемый человеком. – Eugene
@ Юджин Хорошо. Предположим теперь, что каждый китайский символ хранится как два байта в файле, а чтение/запись байтового потока читает и записывает один байт за один раз в другой файл, и, наконец, инструмент (блокнот ++) преобразует его в удобочитаемую форму (т.е. объединить два байта, чтобы сформировать китайский символ). Но в чем проблема в потоке символов, это также чтение и запись двух байтов за один раз, и инструмент (блокнот ++) должен преобразовать его в читаемую человеком форму. –
не обязательно два байта, это может быть больше; например, суррогатные пары. Также почти наверняка вы ошиблись в кодировке, см. Здесь для подсказки: http://stackoverflow.com/questions/13350676/how-to-read-write-this-in-utf-8 – Eugene