RSS

Problema al parsear mensaje XML a string en iPhone, carácteres raros.

0 comentarios

14 oct 2009

En el proyecto para iPhone en el que trabajo actualmente necesitamos recibir mensajes de texto de un servidor y mostrarlos en un listado.

El problema que nos hemos encontrado es que los carácteres especiales, los que no forman parte de la tabla ASCII original, se visualizan incorrectamente, esto es debido a que al crear la cadena a partir del mensaje recibido hay que especificar la codificación en que este se creó. Sabemos que ésta será UTF8 ya que el servicio que consumimos es una servicio WCF de .NET, entonces, como lo podríamos hacer?

La verdad es que justo estoy empezando a programar para iPhone y no estoy muy familiarizado con la sintaxis de Objective-C ni el framework en general, así que me ha costado dar con la solucion ya que hay infinidad de maneras de construir una cadena mediante la clase NSString.

Inicialmente teníamos un código como el que sigue:

UInt8 buffer[2048];
CFIndex bytesRead = CFReadStreamRead(_stream, buffer, sizeof(buffer));

if(bytesRead > 0)
{
   NSString* msg = [NSString stringWithCString: (char*)buffer length: bytesRead];
}

En este caso no se le está especificando la codificación y es por eso que no funciona correctamente con los carácteres no ASCII estándard, por lo tanto hay que buscar otra manera. La primera idea era mirar el método stringWithUTF8String, pero, sorpresa! este no nos deja especificar la longitud de los datos de entrada que le proporcionamos en forma de array de bytes, y en nuestro caso es necesario ya que no podemos garantizar que termine con un byte nulo que es lo que requiere este método (sino no leerá bien y retornará un resultado nulo). Finalmente después de consultar bastantes foros se hace la luz:

NSString* msg = [[NSString alloc] initWithBytes:buffer length: bytesRead encoding: NSUTF8StringEncoding];

De esta manera por fin obtenemos la cadena de texto correctamente.
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Acerca de mi...

9 oct 2009

Datos Personales:
  • Nací el 11 de febrero de 1983 en Barcelona.
  • Soy Ingeniero Técnico en Informática de Sistemas por la Universitat Ramón Llul (2008).
  • Desde 2006 en el Departamento de Informática de La Salle Bonanova (URL).
  • Normalmente llevo a cabo tareas de análisis y diseño orientados a objetos y codificación, además de documentación.
  • Me gusta la música, la tecnología, mantenerme en forma, la musculación, la carrera de fondo, la fotografía y disfrutar de buenos ratos con los amigos, siempre que me quede tiempo :)
Información de contacto:
  • E-mail: sefirot22@gmail.com
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Introducción

0 comentarios

8 oct 2009

Bienvenidos a mi blog personal.

Mi nombre es Albert y actualmente trabajo como becario en el Departamento de Informática de la La Salle Bonanova (Universidad Ramón Llull).

En nuestro día a dia desarrollamos proyectos para empresa, típicamente soluciones de gestión en .NET con acceso a bases de datos SQL Server, aunque últimamente también estamos tocando otras tecnologías interesantes, como J2ME y iPhone SDK para programación para móviles.

Soy Ingeniero Técnico en Informática de Sistemas y actualmente curso 5º curso de Ingeniería Superior.

Este blog nace básicamente con tres objetivos:

1. Recopilar el conocimiento que voy adquiriendo día a día, ya que muchas veces sucede que tocas cosas muy concretas de una tecnología que rápidamente quedan olvidadas, de esta manera quiero mantener un diario donde toda esta inforamación quede ahí para poder ser consultada después.

2. Aportar un poco de mi conocimiento a la comunidad, ya que debo admitirlo, hago un uso intensivo de Internet para buscar como atacar muchos problemas, pero el tiempo es oro y después raramente posteo en foros ayudando a los demás, así que al menos de esta manera aportaré mi pequeño grano de arena a la comunidad :)

3. Y finalmente, a nivel profesional, que sirva como un sitio donde pueda dar a conocer las areas en que trabajo actualmente, compartir inquietudes, etc.

Pues eso es todo para mi primer post, espero encontrar pronto algun tema interesante sobre el cual hacer algun comentario.

Hasta la próxima!
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS