Spowoduje to przekonwertowanie znaków, których nie można odwzorować, takich jak „\ u00e0” (& agrave;) na „?”. Lepiej byłoby mieć metodę, która przekształca to w „a”.
Arnout Engelen
11
Dla osób używających Java 7 lub nowszej, użyj klasy StandardCharsets, która zawiera pewne stałe dla standardowych zestawów znaków. byte[] b = s.getBytes(StandardCharsets.US_ASCII);
Alexis C.
23
Jeśli jesteś guawaużytkownik jest przydatna Charsetsklasa:
String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
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:
jeśli tak, czy możesz mi powiedzieć, jak to możliwe, że litera hebrajska jest pobierana 1 bajt (kodowanie ascii), a nawet nie istnieje w ascii. i nie używa domyślnego kodowania, ponieważ określiłem ręcznie. i.stack.imgur.com/5WPD3.jpg
Royi Namir
@RoyiNamir: To może być lepiej opublikowane jako nowe pytanie, ale powodem jest to, że znak nie jest kodowany w US-ASCII i określono 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).
Jörn Horstmann
5
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.
To całkiem dobra wskazówka! Na Androidzie getBytes (...) NIE działa poprawnie nawet na ICS +
dziwne
Nie mogę nigdzie znaleźć EncodingUtils?
behelit
1
@behelit, jeśli podążasz za moim linkiem, przekierowuje do tego bitu: developer.android.com/about/versions/marshmallow/ ... Zasadniczo mówiąc, musisz ręcznie dołączyć bibliotekę HTTP Apache, ponieważ jest teraz przestarzała.
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 stringbyte[] dataset = newbyte[len];
for (int i = 0; i < len; ++i) {
char c = mString.charAt(i);
dataset[i]= (byte) c;
}
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
jestCharset
typu (nieString
), więc unikasz zaznaczaniaUnsupportedEncodingException
wyrzucanego tylko zString.getBytes(String)
, ale nie zString.getBytes(Charset)
.W Javie 7 istnieje równoważna
StandardCharsets
klasa.źródło
String.getBytes(Charset)
nie został dodany do API 9 :( Więc jeśli chcesz kierować reklamy na Froyo iW 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);
źródło
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.
źródło
String s = "ASCII Text"; byte[] bytes = s.getBytes("US-ASCII");
źródło
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");
źródło
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; }
źródło
Konwertuj ciąg na wartości 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); }
źródło
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
źródło
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(); } } }
źródło