2016-05-20 14 views
1

この知識のC#コードは、エンコーディングを使用せずにbyte []をStringに変換します。今私はJavaで同じことをしようとしていますが、私は同じ結果を生成するための正しいエンコーディングを見つけることができません。Byte []配列から文字列へのC#からエンコーディングなしのJavaへ

TLDR:C#コードと同じ結果をもたらすJavaコード/ソリューションを探しています。

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バイトのバイトオーダーマークが挿入されます。あなたは '新しい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(); 
     } 
    } 
} 

文字列コンストラクタの詳細here

さらに、Javaエンコーディングに関するチュートリアルの一部は、hereです。

コメントに記載されているように、文字列/バイトの変換に「エンコードなし」というものはありません。暗黙的またはデフォルトのエンコーディングが使用されている可能性がありますが、文字列からバイト[]への変換には常にエンコーディングが必要です。また

How to convert Java String into byte[]?

関連する問題