Как преобразовать строку Java в массив байтов ASCII?



Как преобразовать строку Java в массив байтов ASCII?

908   10  

10 ответов:

С помощью getBytes метод, давая ему соответствующий Charset (или Charset имя).

пример:

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

(Перед Java 7:byte[] b = s.getBytes("US-ASCII");)

если вы гуавы пользователь есть удобный Charsets класс:

String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);

Помимо не жесткого кодирования произвольного имени кодировки в исходном коде он имеет гораздо большее преимущество:Charsets.US_ASCII из Charset тип (не String) так что вы не проверили UnsupportedEncodingException возникает только с String.getBytes(String), но не String.getBytes(Charset).

в Java 7 есть эквивалент StandardCharsets класса.

в коде, который вы пробовали, есть только один символ:

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

обратите внимание на верхний регистр "строка". Это пытается вызвать статический метод класса String, который не существует. Вместо этого вам нужно вызвать метод на вашем экземпляре string:

byte[] bytes = string.getBytes(characterSet);

проблема с другими предлагаемыми решениями заключается в том, что они либо отбрасывают символы, которые не могут быть напрямую сопоставлены с ASCII, либо заменяют их символом маркера, например ?.

вы можете захотеть, чтобы, например, акцентированные символы были преобразованы в тот же символ без акцента. Для этого есть несколько трюков (включая создание статической таблицы сопоставления самостоятельно или использование существующей "нормализации", определенной для unicode), но эти методы далеки от полного.

лучше всего использовать junidecode библиотека, которая также не может быть полной, но включает в себя большой опыт в наиболее разумном способе транслитерации Unicode в ASCII.

String s = "ASCII Text";
byte[] bytes = s.getBytes("US-ASCII");

Если вам это нужно в Android и вы хотите, чтобы он работал с чем-либо старше FroYo, вы также можете использовать EncodingUtils.getAsciiBytes ():

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

в моей строке у меня есть тайские символы (кодировка 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;
  }

преобразование строки В значения 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);
   }

Я нашел решение. На самом деле класс 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

попробуйте это:

/**
 * @(#)demo1.java
 *
 *
 * @author 
 * @version 1.00 2012/8/30
 */

import java.util.*;

public class demo1 
{
    Scanner s=new Scanner(System.in);

    String str;
    int key;

    void getdata()
    {
        System.out.println ("plase enter a string");
        str=s.next();
        System.out.println ("plase enter a key");
        key=s.nextInt();
    }

    void display()
    {
        char a;
        int j;
        for ( int i = 0; i < str.length(); ++i )
        {

            char c = str.charAt( i );
            j = (int) c + key;
            a= (char) j;

            System.out.print(a);  
        }

        public static void main(String[] args)
        {
            demo1 obj=new demo1();
            obj.getdata();
            obj.display();
        }
    }
}

Comments

    Ничего не найдено.