2013-07-02 2 views
0

В Java классы DataInputStream и DataOutputStream имеют readUTF и writeUTF, которые используют модифицированный формат UTF-8. Это нормально, если эти файлы используются только другими программами Java или одной и той же программой Java, но что, если они также читаются/записываются программой на другом языке? Или что, если вы используете стандартный формат, например BSON, который ожидает нормальную кодировку UTF-8? Есть ли способ использовать истинную кодировку UTF-8 с DataInput и DataOutput помимо ручного кодирования/декодирования строк с помощью Charset?Использование истинных UTF-8 в двоичных потоках в java

ответ

1

использовать InputStreamReader и InputStreamWriter, вместо этого вы можете инициализировать поток с определенной кодировкой.

Если вы используете JSon потоки, использовать библиотеку как gson, который обрабатывает потоки JSON тоже, которые, как предполагается придерживаться json.org форматирования, вы не должны использовать строковый поток со странным для кодирования transporing JSON потоков

+0

Извините, JSON - плохой пример, поскольку он основан на тексте. И InputStreamWriter/Reader не совсем то, что я имел в виду, потому что они действительно работают, только если вы имеете дело с чисто текстовыми файлами. Но что, если у вас есть файл, который содержит двоичные записи, в которых некоторые из полей являются целыми и двойными, а другие поля - это строки с кодировкой UTF-8. Как вы могли бы разобраться со струнами в этом случае? Единственный способ, о котором я могу думать, это прочитать их как 'byte []' s, а затем декодировать их. – Thayne

+0

Если вы строите это с нуля и можете управлять форматом вещей, никогда не применяйте свой собственный формат. Вместо этого используйте сериализатор, например буферы протоколов, сериализаторы xml, json/bson (и т. Д.). –

+0

Если вы не можете помочь, я бы предложил просто прочитать байты и смещать части, которые должны быть unicode, и перевести их с помощью новой String (байты, кодирование). –

Смежные вопросы