¿Cómo convertir una cadena de Java en una matriz de bytes ASCII?
¿Cómo convertir una cadena de Java en una matriz de bytes ASCII?
Respuestas:
byte[] b = s.getBytes(StandardCharsets.US_ASCII);
Si eres un guayabausuario hay una Charsets
clase útil :
String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
Aparte de no codificar de forma rígida el nombre del juego de caracteres arbitrario en su código fuente, tiene una ventaja mucho mayor: Charsets.US_ASCII
es de Charset
tipo (no String
), por lo que evita que se verifiquen UnsupportedEncodingException
arrojados solo desde String.getBytes(String)
, pero no desde String.getBytes(Charset)
.
En Java 7 existe una StandardCharsets
clase equivalente .
String.getBytes(Charset)
no se agregó hasta la API 9 :( Entonces, si desea apuntar a Froyo y superior, no puede hacerlo.
Solo hay un carácter incorrecto en el código que probó:
Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
^
Observe la "Cadena" en mayúscula. Esto intenta invocar un método estático en la clase de cadena, que no existe. En su lugar, debe invocar el método en su instancia de cadena:
byte[] bytes = string.getBytes(characterSet);
getBytes(Charset)
método se especifica para reemplazar los caracteres que no se pueden codificar. Con US-ASCII, este carácter de reemplazo es el signo de interrogación, por lo que su matriz de bytes contiene un elemento con el valor ASCII de '?' (63).
El problema con otras soluciones propuestas es que eliminarán caracteres que no se pueden asignar directamente a ASCII o los reemplazarán con un carácter marcador como ?
.
Es posible que desee, por ejemplo, que los caracteres acentuados se conviertan en ese mismo carácter sin el acento. Hay un par de trucos para hacer esto (incluida la construcción de una tabla de mapeo estático usted mismo o el aprovechamiento de la 'normalización' existente definida para Unicode), pero esos métodos están lejos de ser completos.
Su mejor opción es usar la biblioteca junidecode , que tampoco puede ser completa pero que incorpora mucha experiencia en la forma más sensata de transliterar Unicode a ASCII.
Si necesita esto en Android y quiere que funcione con algo más antiguo que FroYo, también puede usar EncodingUtils.getAsciiBytes () :
byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
En mi cadena tengo caracteres tailandeses (codificados en TIS620) y diéresis alemanas. La respuesta de Agiles me puso en el camino correcto. En lugar de .getBytes () que uso ahora
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;
}
Encontré la solución. En realidad, la clase Base64 no está disponible en Android. El enlace se proporciona a continuación para obtener más información.
byte[] byteArray;
byteArray= json.getBytes(StandardCharsets.US_ASCII);
String encoded=Base64.encodeBytes(byteArray);
userLogin(encoded);
Aquí está el enlace para la clase Base64: http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html
Prueba esto:
/**
* @(#)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();
}
}
}