2016-05-20 1 views
1

Этот кусок кода C# (насколько мне известно) преобразует байт [] в String без использования кодировки. Теперь я пытаюсь сделать то же самое на Java, но я не могу найти правильную кодировку для получения того же результата.Byte [] Array to String C# на Java без кодирования

TLDR: Я ищу код Java/решение, которое дает тот же результат, что и код C# ниже.

C#:

public static byte[] StringToByteArray(String value){ 
     byte[] bytes = new byte[value.Length * sizeof(char)]; 
     Buffer.BlockCopy(value.ToCharArray(), 0, bytes, 0, bytes.Length); 
     return bytes; 
} 

public static String ByteArrayToString(byte[] value){ 
     char[] chars = new char[value.Length/sizeof(char)]; 
     Buffer.BlockCopy(value, 0, chars, 0, value.Length); 
     return new string(chars); 
} 
+4

«без использования кодирования» - этот код еще «использует кодирование» в том смысле, что выход версии производит UTF-16 кодировке выход, а вход версии ожидает, что это будет UTF- 16-кодированный вход. –

+1

Каждое преобразование между строкой и байтом [] использует кодировку, явную или неявную. – ManoDestra

+0

Таким образом, код C# использует кодировку UTF-16? – user5581557

ответ

0
public static byte[] StringToByteArray(String value){ 
     return Encoding.UTF8.GetBytes(value) 
} 

public static String ByteArrayToString(byte[] value){ 
     return Encoding.UTF8.GetString(value) 
} 
+1

Осторожно там. Это положит отметку порядка 3 байтов в начале всех выходных байтов. Вам нужно использовать 'new UTF8Encoding (False) .GetBytes (value)'. – Nyerguds

+0

Это не похоже на код Java для меня. Какие классы Java вы используете здесь? Или вы написали код C# по ошибке? – ManoDestra

0

согласно вашему запросу, вот некоторые примеры эквивалентного кода в Java ...

Основы

// Converts the string using the default character encoding 
// (equivalent of Encoding.Default in C#). 
byte[] bytes = text.getBytes(); 

// Converts the string using the given character encoding, in this case UTF-8. 
byte[] bytes = text.getBytes("UTF-8"); 

// Converts a byte array to a string using the default encoding. 
String text = new String(bytes); 

// Converts a byte array to a string using the given encoding. 
String text = new String(bytes, "UTF-8"); 

код Пример

public class EncodingTest { 
    public static void main(String[] args) { 
     try { 
      String originalText = "The quick brown fox jumped over the lazy dog."; 

      byte[] defaultBytes = originalText.getBytes(); 
      byte[] utf8Bytes = originalText.getBytes("UTF-8"); 
      byte[] utf16Bytes = originalText.getBytes("UTF-16"); 
      byte[] isoBytes = originalText.getBytes("ISO-8859-1"); 

      System.out.println("Original Text: " + originalText); 
      System.out.println("Text Length: " + originalText.length()); 

      System.out.println("Default Bytes Length: " + defaultBytes.length); 
      System.out.println("UTF-8 Bytes Length: " + utf8Bytes.length); 
      System.out.println("UTF-16 Bytes Length: " + utf16Bytes.length); 
      System.out.println("ISO-8859-1 Bytes Length: " + isoBytes.length); 

      String newDefaultText = new String(defaultBytes); 
      String newUtf8Text = new String(utf8Bytes, "UTF-8"); 
      String newUtf16Text = new String(utf16Bytes, "UTF-16"); 
      String newIsoText = new String(isoBytes, "ISO-8859-1"); 

      System.out.println("New Default Text: " + newDefaultText); 
      System.out.println("New UTF-8 Text: " + newUtf8Text); 
      System.out.println("New UTF-16 Text: " + newUtf16Text); 
      System.out.println("New ISO-8859-1 Text: " + newIsoText); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Дополнительная информация о String constructors here.

И еще некоторые учебные пособия по кодированию Java here.

И как я уже говорил в комментариях, нет никакой вещи, как «без кодирования» для преобразования строк/байтов. Может быть использована неявная или стандартная кодировка, но всегда требуется кодировка, необходимая для преобразования из строки в байт [] и наоборот.

также: How to convert Java String into byte[]?