Resolución del error en el algoritmo de detección de UTF-8

Enviado por clbustos el Jue, 12/01/2006 - 17:38.
Clasificado en:

Bueno, ahora resuelvo el misterio por el tema del error en el algoritmo de detección de UTF-8.

Es muy simple, la verdad: hay que verificar en la condición final, que el contador esté en 0. Si no lo está, significa que hay una cadena UTF-8 malformada. Por tanto, sería bueno crear una nueva constante, que definiera a un UTF-8 mal formado.

El código en Ruby sería algo como lo que sigue. Para el resto de los lenguajes, habría que hacer la modificación correspondiente, que se las dejo de ejercicio

  1.  require "iconv"
  2.  class String
  3.   def encoding
  4.   cuenta=0
  5.   ascii=true
  6.   self.each_byte{|byte|
  7.  
  8.   if cuenta>0
  9.   if (byte >> 6) != 0b10
  10.   return "iso8859"
  11.   else
  12.   cuenta-=1
  13.   end
  14.   elsif(byte & 0x80)
  15.   ascii=false
  16.   if (byte >> 5) == 0b110
  17.   cuenta=1
  18.   elsif (byte >> 4) == 0b1110
  19.   cuenta=2
  20.   elsif (byte >> 3) == 0b11110
  21.   cuenta=3
  22.   else
  23.   return "iso8859"
  24.   end
  25.   end
  26.   }
  27.   return "utf8_incorrecto" if (!ascii and cuenta)
  28.   return ascii ? "ascii":"utf8"
  29.   end
  30.   def to_utf8
  31.   (self.encoding=='iso8859') ? Iconv.new("utf-8","iso-8859-1").iconv(self.to_s) : self
  32.   end
  33.  end
Imagen de Raspu

Estoy montando un blog con Wordpress. La base de datos está en UTF-8, cada tabla y cada campo de la base está en UTF-8. Los correspondientes METAS están definidos para UTF-8. ¿Es necesario pasar todos los archivos a UTF-8? (Wordpress trae los archivos como ANSI).

Enviado por Raspu (no verificado) el Sáb, 28/01/2006 - 13:07.
Imagen de clbustos

Te diría que no... recuerda que UTF-8 funciona bien con ASCII y como la plantilla original de todo está escrito en inglés, no debería haber ningún problema de codificación.

Enviado por clbustos el Sáb, 28/01/2006 - 18:16.
Imagen de Edeld

Te toco :)

http://eldiabloenlosdetalles.net/2006/01/30/mis-5-habitos-%c2%bfraros/

Enviado por Edeld (no verificado) el Lun, 30/01/2006 - 20:50.
Imagen de Rinoceronte Final

Yo también te diría que no es necesario tener los archivos PHP en UTF-8. Para enviar código a PEAR es requisito que estén en latin-1, por lo que no parece imprescindible para trabajar con UTF-8.
En cambio, no me atrevo a afirmarlo rotundamente, pero si que diría que es necesario, el usar las funciones mb_*() para tratar cadenas de texto en UTF-8. O sobreescribir las funciones estándar, con las mb_*() mediante mbstring.func_overload en el php.ini.

Yo escribo todos los PHP en UTF-8, bajo la idea de que me producirá más beneficidos a largo plazo que perdidas. De momento puedo decir que no es así, pero como ya estoy en ello, no me voy a echar atrás...
Solo decir que si a alguien se le ocurre hacer lo mismo que yo, (como punta del iceberg), que vigile al guardar los archivos. Tendrá que hacerlo SIEMPRE sin añadir el BOM. De lo contrario, ese BOM será enviado antes que cualquier cosa, e impedirá enviar cabeceras HTTP a través de PHP.

Por cierto clbustos, que te parece hacer un post futuro sobre las operaciones con bits? Con estas funciones para detectar UTF-8 me he dado cuenta que soy un negado en el asunto. Como simple aficionado que soy, siempre he trabajado con cadenas de texto (no necesitaba más), por lo que no se operar con bits. (Ahora es cuando me señalan con el dedo y se rien). :-P

Enviado por Rinoceronte Final (no verificado) el Mar, 31/01/2006 - 10:07.
Imagen de clbustos

En mi caso, lo que me gusta hacer es tener todo lo en UTF-8 en plantillas html, que cargo después con PHP, en prístino ISO-8859-1.
Quedé metido con lo de las operaciones con bits. ¿Qué cosa necesitas, precisamente? La verdad, tampoco soy muy bueno; tuve que jugar con ensayo y error para dar bien con la formula :P

Enviado por clbustos el Mar, 31/01/2006 - 10:33.
Imagen de Rinoceronte Final

Básicamente, el capitulo Operadores Bit a Bit del manual de PHP. Me suena a chino...

Enviado por Rinoceronte Final (no verificado) el Mié, 01/02/2006 - 03:27.
Imagen de clbustos

Buena...
Igual, mientras armaba el detector de UTF-8, me pillé un muy buen artículo sobre los operadores, pero para C. Lo voy a buscar y pondré el link.

Enviado por clbustos el Mié, 01/02/2006 - 03:41.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
If you have a Gravatar account, used to display your avatar.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato