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

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

Ответ 1

Используя метод getBytes, присвоенный ему Charset (или Charset name).

Пример:

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

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

Ответ 2

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

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

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

В Java 7 существует эквивалентный класс StandardCharsets.

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

В моей строке у меня есть тайские символы (закодированные TIS620) и немецкие умляуты. Ответ от agiles поставил меня на правильный путь. Вместо .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;
  }

Ответ 8

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

Ответ 9

Попробуйте следующее:

/**
 * @(#)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();
        }
    }
}