2013-03-25 3 views
1

Я написал небольшой метод, что преобразует входящие строки в UTF-8 кодировке:Java IO: CharsetDecoder.decode() не работает должным образом на Linux

private String convertStringToUTF8(String pIncomingString) throws CharacterCodingException { 

     CharsetDecoder cd = Charset.availableCharsets().get("UTF-8").newDecoder(); 
     CharBuffer buffer = cd.decode(ByteBuffer.wrap(pIncomingString.getBytes())); 

     return buffer.toString(); 
    } 

Это отлично работает на компьютере Windows, например - 'Scúp' заменяется на 'Scúp'. Однако при развертывании в Linux это не работает («Scúp» остается «Scúp»). Кто-нибудь знает, как решить эту досадную проблему в Linux?

+0

Я мог ошибаться, но может быть, что система не может распечатать UTF-8, а не фактическую кодировку, которая является ошибочной? – ddmps

+0

№ Приложение затем записывает в базу данных. В одном случае я получаю «º», в другом «ú». – adrift

+1

UTF-8 - это кодировка от символов до байтов. Понятие «String», кодируемое UTF-8, не имеет никакого смысла. – erickson

ответ

0

Я решил это, добавив аргумент JVM -Dfile.encoding = ISO-8859-1.

0

В Java строка небезопасна для использования в качестве последовательности байтов. String.getBytes() не гарантирует возврат одного байта на символ. Действительно, в Linux, где стандартная кодировка обычно UTF-8, String.getBytes() преобразует любые символы выше \ u007f в несколько байтов.

Таким образом, если вы хотите сохранить последовательность байтов, используйте byte[], а не String.

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