Как преобразовать строку Java в массив байтов ASCII?
Как преобразовать строку Java в массив байтов ASCII?
11 ответов
С использованием 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
учебный класс.
Проблема с другими предлагаемыми решениями заключается в том, что они будут отбрасывать символы, которые не могут быть напрямую сопоставлены с ASCII, или заменять их символом маркера, таким как ?
,
Вы можете захотеть, например, чтобы символы с акцентом были преобразованы в этот же символ без акцента. Для этого есть пара трюков (в том числе создание таблицы статического отображения самостоятельно или использование существующей "нормализации", определенной для юникода), но эти методы еще далеко не завершены.
Лучше всего использовать библиотеку junidecode, которая также не может быть полной, но включает в себя большой опыт транслитерации Unicode в ASCII.
В коде, который вы пробовали, есть только один неправильный символ:
Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
^
Обратите внимание на верхний регистр "Строка". Это пытается вызвать статический метод для строкового класса, который не существует. Вместо этого вам нужно вызвать метод для вашего экземпляра строки:
byte[] bytes = string.getBytes(characterSet);
Если вам это понадобится в Android и вы хотите, чтобы оно работало с чем-то старше FroYo, вы также можете использовать EncodingUtils.getAsciiBytes ():
byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
В моей строке есть тайские символы (в кодировке 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;
}
String s = "ASCII Text";
byte[] bytes = s.getBytes("US-ASCII");
Я нашел решение. На самом деле класс 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
Преобразовать строку в значения 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);
}
Чтобы преобразовать строку в массив байтов ASCII:
String s1 = "Hello World!";
byte[] byteArray = s1.getBytes(StandardCharsets.US_ASCII);
// Now byteArray is [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]
Чтобы преобразовать массив байтов ASCII в строку:
String s2 = new String(byteArray, StandardCharsets.US_ASCII));
Попробуй это:
/**
* @(#)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();
}
}
}