Как преобразовать строку Java в массив байтов ASCII? - PullRequest
72 голосов
/ 16 апреля 2011

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

Ответы [ 10 ]

143 голосов
/ 16 апреля 2011

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

Пример:

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

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

22 голосов
/ 23 августа 2012

Если вы являетесь , у вас есть удобный 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 класс.

5 голосов
/ 03 января 2012

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

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

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

5 голосов
/ 16 апреля 2011

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

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

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

byte[] bytes = string.getBytes(characterSet);
4 голосов
/ 15 января 2012

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

byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
4 голосов
/ 16 апреля 2011
String s = "ASCII Text";
byte[] bytes = s.getBytes("US-ASCII");
2 голосов
/ 06 октября 2013

В моей строке есть тайские символы (в кодировке 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;
  }
0 голосов
/ 27 февраля 2018

Я нашел решение.На самом деле класс 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 голосов
/ 30 августа 2012

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

/**
 * @(#)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();
        }
    }
}
0 голосов
/ 16 ноября 2011

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