web-dev-qa-db-ja.com

Java文字列をASCIIバイト配列に変換する方法は?

Java文字列をASCIIバイト配列に変換する方法は?

73
farm ostrich

getBytes メソッドを使用して、適切な Charset (またはCharset name)を指定します。

例:

String s = "Hello, there.";
byte[] b = s.getBytes(StandardCharsets.US_ASCII);

(Java 7より前:byte[] b = s.getBytes("US-ASCII");

他の提案されたソリューションの問題は、ASCIIに直接マッピングできない文字をドロップするか、?のようなマーカー文字に置き換えることです。

たとえば、アクセント付き文字をアクセントなしの同じ文字に変換したい場合があります。これを行うにはいくつかのトリックがあります(静的マッピングテーブルを自分で作成するか、Unicodeに定義された既存の「正規化」を活用するなど)が、これらの方法は完全にはほど遠いです。

最善の策は junidecode ライブラリを使用することです。これも完全ではありませんが、UnicodeをASCIIに音訳する最も健全な方法で多くの経験を取り入れています。

5
Arnout Engelen

試したコードには1文字しか間違っていません。

Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
               ^

大文字の「String」に注意してください。これは、存在しない文字列クラスの静的メソッドを呼び出そうとします。代わりに、文字列インスタンスでメソッドを呼び出す必要があります。

byte[] bytes = string.getBytes(characterSet);
5
Jörn Horstmann
String s = "ASCII Text";
byte[] bytes = s.getBytes("US-ASCII");
4
Babar

Androidでこれが必要になり、FroYoより古いもので動作させたい場合は、 EncodingUtils.getAsciiBytes() を使用することもできます。

byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
4
dain

私の文字列には、タイ文字(TIS620エンコード)とドイツ語のウムラウトがあります。アギレスからの答えは正しい道に私を置きました。 .getBytes()の代わりに私は今使用しています

  int len = mString.length(); // Length of the string
  byte[] dataset = new byte[len];
  for (int i = 0; i < len; ++i) {
     char c = mString.charAt(i);
     dataset[i]= (byte) c;
  }
2
thpitsch

私は解決策を見つけました。実際、Base64クラスはAndroidでは使用できません。詳細については、以下のリンクを参照してください。

byte[] byteArray;                                                  
     byteArray= json.getBytes(StandardCharsets.US_ASCII);
    String encoded=Base64.encodeBytes(byteArray);
    userLogin(encoded);

Base64クラスのリンクは次のとおりです。 http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-Android.html

0
Abdulmateen Ch.

文字列をASCII値に変換します。

   String test = "ABCD";

   for ( int i = 0; i < test.length(); ++i ) {
   char c = test.charAt( i );
   int j = (int) c;
   System.out.println(j);
   }
0
agiles