Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] UTF-8 en String?

Estas en el tema de UTF-8 en String? en el foro de Java en Foros del Web. Bueno, ahora estoy probando a leer de forma aleatoria un ficherito que tengo creado de prueba, tiene 3 campos, el primero un string, el segundo ...
  #1 (permalink)  
Antiguo 06/03/2014, 17:17
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 8 años, 1 mes
Puntos: 1
UTF-8 en String?

Bueno, ahora estoy probando a leer de forma aleatoria un ficherito que tengo creado de prueba, tiene 3 campos, el primero un string, el segundo un int y el 3 un float, quiero mover el puntero a la posicion que yo quiera para leer el dato correspondiente en esa posicion, segun leo la posicion va enumaras en bytes, siendo 0 el principio del fichero, mi pregunta es cuantos bytes se asigna al string con esa codificacion utf-8? cuando me intento posicionar en una posicion me salen solo numeros al leer, supongo que porque no llevo bien el puntero para leer el dato.

Gracias y un saludo de nuevo.
  #2 (permalink)  
Antiguo 07/03/2014, 02:09
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.773
Antigüedad: 15 años, 2 meses
Puntos: 454
Respuesta: UTF-8 en String?

Hola:

Para que te pueda funcionar bien debes asegurarte que en el fichero todos los grupos de tres campos ocupan el mismo número de bytes para poder echar la cuenta y saber a qué posición concreta ir. Si el conjunto de 3 campos ocupa siempre 10 bytes, por decir algo, la cuenta es numeroRegistroDeseado*10. Si no es así, no puedes ubicarte en un principio de registro sin recorrer todo el fichero.

utf-8 usa en principio un byte por caracter, pero no es una norma fija. Si los caracteres son raros, como acentos, eñes o de otro idioma, el caracter puede ocuptar 2, 3 o 4 bytes http://es.wikipedia.org/wiki/UTF-8

Así que si todos tus string son de la misma longitud y usan caracteres ascii normales, podrías hacer lo que quieres.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 07/03/2014, 08:10
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 8 años, 1 mes
Puntos: 1
Respuesta: UTF-8 en String?

Hola amigo Chuidiang, he intentado eso que me dices y te pongo el ejemplo con los datos que tengo en el fichero:

pepe4010--- Donde pepe es nombre, 40 edad y 10 es una nota
luis3010--- Este seria el siguiente bloque de datos

Pues bien cuando estoy en la posicion 0 me lee pepe sin problemas, pero si llevo el puntero con seek a la posicion 4 me deberia de leer 40 y no me lo lee, para que me lea el 40 tengo que colocarle seek(6) porque 6 si su posicion es 4?

Gracias y un saludo.
  #4 (permalink)  
Antiguo 07/03/2014, 09:17
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.773
Antigüedad: 15 años, 2 meses
Puntos: 454
Respuesta: UTF-8 en String?

¿Cómo lees ese 40?
¿Cómo has escrito el fichero y cómo lo lees?. Si lo has escrito con writeUTF() y lo lees con readUTF(), delante de pepe hay dos bytes más que no has escrito en el post. writeUTF("pepe") escribe dos bytes para indicar la longitud de la cadena y luego "pepe". readUTF() lee esos dos bytes para saber cuantos caracteres tiene que leer y luego lee "pepe".

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 07/03/2014, 09:23
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 8 años, 1 mes
Puntos: 1
Respuesta: UTF-8 en String?

Si amigo lo escribi con writeUTF, y a que 2 bytes te refieres delante de pepe? tambien hay otros 2 bytes delante de luis? tendria que haber escrito el string de otra forma?

el 40 lo leo como lo escribi, con readInt()

Gracias y un saludo.
  #6 (permalink)  
Antiguo 07/03/2014, 11:42
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.773
Antigüedad: 15 años, 2 meses
Puntos: 454
Respuesta: UTF-8 en String?

Hola:

Mira la API de RandomAccessFile, su método writeUTF() http://docs.oracle.com/javase/7/docs...ccessFile.html . El método escribe primero un short (2 bytes) para poner la longitud de la cadena y luego la cadena. Así que toda cadena escrita con writeUTF() y si son caracteres ascii normales, ocupa en fichero la longituda de la cadena + 2. Idem con luis y con cualquier otra cadena que tengas en el fichero y haya sido escrita con writeUTF().

Así que lo dicho, la cadena de pepe en realidad son 6 bytes (2 + 4). Y eso cuadra con que tengas que poner la posición 6 para leer el 40.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 07/03/2014, 14:22
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 8 años, 1 mes
Puntos: 1
Respuesta: UTF-8 en String?

Gracias amigo Chuidiang, cuando esperaba tu respuesta estuve indagando y leyendo y como bien dices coloca esos 2 bytes para comprobar la longitud de la cadena, ya me cuadra todo,jejeje. Saludos.

Etiquetas: string, utf-8
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:30.