2015-09-10 2 views
1

Я пытаюсь определить, будет ли собственный метод правильно декодировать массив байтов с учетом разных кодировок. Следующий код - это то, как я подошел к генерации данных для кодирования.Понимание кодировки Java

public class Encoding { 

    static byte[] VALUES = {(byte) 0x00, ..... (byte) 0xFF}; 
    static String[] ENCODING = {"Windows-1252","ISO-8859-1"}; 

    public static void main(String[] args) throws UnsupportedEncodingException { 

    for(String encode : ENCODING) { 
     for(byte value : VALUES) { 
     byte[] inputByte = new byte[]{value}; 
     String input = new String(inputByte, encode); 
     String houseInput = houseMethod(input.getBytes()); 
     } 
    } 
    } 
} 

Вопрос в том, когда приходит вызов метода дома, какая кодировка будет отправлена ​​на этот метод? Я понимаю, когда Java хранит String, он преобразует ее в UTF-16. Поэтому, когда я отправляю Input.getBytes(), он отправляет байт кодировки UTF-16 или схему кодирования, которую я установил, когда я создал новую строку? Я предполагаю, что это UTF-16, но я не уверен. Должен ли дом метод быть ???

houseMethod(input.getBytes(encode)) 
+0

Байты не имеют кодировки; символы и строки имеют один – fantaghirocco

+0

@fantaghirocco. См. Https://docs.oracle.com/javase/tutorial/i18n/text/string.html defaultBytes vs utf8Bytes –

+0

@fantaghirocco Нет, символы и строки в Java не имеют кодировки. Кодировка - это то, что вам нужно ** конвертировать ** между символами/строками и байтами. –

ответ

4

См String.getBytes():

Зашифровывает эту строку в последовательность байтов, используя по умолчанию используется кодировка платформы, сохраняя результат в новый массив байтов.

Рекомендуется использовать метод String.getBytes (Charset) и явно указать желаемую кодировку.

2

По Java documentationString.getBytes():

Зашифровывает эту строку в последовательность байтов, используя по умолчанию используется кодировка платформы, сохраняя результат в новый байтовый массив

Так байты, что в метод дома зависит от того, какая ОС вы, а также ваши настройки локали.

OTH, String.getBytes(encoding) гарантирует, что вы получите байты в кодировке, которую вы передаете в качестве параметра.