Jak przekonwertować ciąg Java na tablicę bajtów ASCII?
Jak przekonwertować ciąg Java na tablicę bajtów ASCII?
Odpowiedzi:
byte[] b = s.getBytes(StandardCharsets.US_ASCII);
Jeśli jesteś guawaużytkownik jest przydatna Charsets
klasa:
String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
Oprócz tego, że nie zakodujesz na stałe dowolnej nazwy zestawu znaków w swoim kodzie źródłowym, ma on znacznie większą zaletę: Charsets.US_ASCII
jest Charset
typu (nie String
), więc unikasz zaznaczania UnsupportedEncodingException
wyrzucanego tylko z String.getBytes(String)
, ale nie z String.getBytes(Charset)
.
W Javie 7 istnieje równoważna StandardCharsets
klasa.
String.getBytes(Charset)
nie został dodany do API 9 :( Więc jeśli chcesz kierować reklamy na Froyo i
W próbowanym kodzie jest tylko jeden znak nieprawidłowy:
Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
^
Zwróć uwagę na wielkie litery „String”. To próbuje wywołać metodę statyczną w klasie string, która nie istnieje. Zamiast tego musisz wywołać metodę na swojej instancji ciągu:
byte[] bytes = string.getBytes(characterSet);
getBytes(Charset)
metodę zastępowania znaków, których nie można zakodować. W przypadku US-ASCII ten znak zastępczy jest znakiem zapytania, więc tablica bajtów zawiera jeden element o wartości ASCII „?” (63).
Problem z innymi proponowanymi rozwiązaniami polega na tym, że albo upuszczają znaki, których nie można bezpośrednio odwzorować na ASCII, albo zastępują je znakiem znacznika, takim jak ?
.
Możesz na przykład chcieć przekonwertować znaki akcentowane na ten sam znak bez akcentu. Jest kilka sztuczek, aby to zrobić (w tym samodzielne zbudowanie statycznej tabeli mapowania lub wykorzystanie istniejącej „normalizacji” zdefiniowanej dla Unicode), ale metody te są dalekie od ukończenia.
Najlepszym rozwiązaniem jest użycie biblioteki junidecode , która też nie może być kompletna, ale zawiera duże doświadczenie w najbardziej rozsądnym sposobie transliteracji Unicode na ASCII.
Jeśli potrzebujesz tego w Androidzie i chcesz, aby działało z czymkolwiek starszym niż FroYo, możesz również użyć EncodingUtils.getAsciiBytes () :
byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
W swoim ciągu mam znaki tajskie (zakodowane w TIS620) i niemieckie umlauty. Odpowiedź udzielona przez agiles skierowała mnie na właściwą ścieżkę. Zamiast .getBytes () używam teraz
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;
}
Znalazłem rozwiązanie. W rzeczywistości klasa Base64 nie jest dostępna w systemie Android. Link znajduje się poniżej, aby uzyskać więcej informacji.
byte[] byteArray;
byteArray= json.getBytes(StandardCharsets.US_ASCII);
String encoded=Base64.encodeBytes(byteArray);
userLogin(encoded);
Oto link do klasy Base64: http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html
Spróbuj tego:
/**
* @(#)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();
}
}
}