La mayoría de las respuestas aquí proponen atajos, que pueden ocasionarle grandes problemas si no tiene idea de lo que está haciendo. Si usted quiere tomar atajos, entonces usted tiene que saber exactamente qué codificación los datos están en.
UTF-16
Siempre java habla de personajes en su documentación, se habla acerca de caracteres de 16 bits.
Puede usar un DataInputStream
, que tiene métodos convenientes. Para mayor eficiencia, envuélvalo en un BufferedReader
.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
La cosa es que cada readChar()
van a actuar read
2 's y combinarlos para un personaje de 16 bits.
US-ASCII
reservas US-ASCII de 8 bits para codificar 1 carácter. La tabla ASCII solo describe 128 caracteres posibles, por lo que 1 bit no se usa.
Simplemente puede realizar un molde en este caso.
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
ASCII extendido de
UTF-8, Latin-1, ANSI y muchas otras codificaciones utilizan los 8 bits. Los primeros 7 bits siguen la tabla ASCII y son idénticos a los de la codificación US-ASCII. Sin embargo, el 8vo bit ofrece caracteres que son diferentes en todas estas codificaciones. Entonces, aquí las cosas se ponen interesantes.
Si eres un vaquero, y piensas que el 8vo bit no importa (es decir, no te importan los personajes como "à, é, ç, è, ô ...) entonces puedes escapar con un reparto simple.
Sin embargo, si usted quiere hacer esto profesionalmente, realmente debería sIEMPRE especificar un juego de caracteres de texto cada vez que se importa/exportación (por ejemplo, tomas de corriente, archivos ...).
siempre use los conjuntos de caracteres
Seamos serios. Todas las opciones anteriores son trucos baratos. Si desea escribir software flexible, necesita para admitir un juego de caracteres configurable para importar/exportar sus datos.Aquí hay una solución genérica:
Leer sus datos usando un tampón byte[]
y convertir eso a un String
utilizando un parámetro charset.
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
También puede utilizar un InputStreamReader
que se pueden crear instancias con un parámetro charset.
Solo una regla de oro más: nunca coloques un byte directamente a un personaje. Eso siempre es un error.
No dio detalles sobre qué datos se le envían y lectura. ¿Envía bytes binarios o caracteres Unicode? El método de lectores .read() devuelve un int. Sí, pero devuelve el carácter leído, como un entero en el rango de 0 a 65535 (o -1, esto es porque creo que se utilizó int en lugar de char). Tal vez simplemente usando 'public int read (char [] cbuf)' resolverá el problema? – Vanuan
Las respuestas a esta pregunta no funcionan para JSP Java. Si está utilizando jsp, consulte este error de desbordamiento de pila: http://stackoverflow.com/questions/4621836/how-to-convert-int-to-char-in-jsp-expression-language – NuclearPeon
Creo que esto es válido pregunta. Una de las dificultades de convertir un entero en un carácter, es tratar con valores negativos y valores> = 255. – bvdb