Archivo de la etiqueta: UTF-8

Problemas con la codificación de caracteres – Leyendas del UTF-8

Uno de los grandes problemas con los que nos encontramos los programadores de habla no inglesa es el trabajar con los caracteres que no tiene el alfabeto inglés. Si a esto le sumamos que en algunos escenarios de tenemos que combinar nuestro trabajo entre diferentes entornos, por ejemplo entre Windows – Linux, nos podemos encontrar más de una sorpresa a la hora de mostrar o trabajar con esos datos. Tengo que decir que hace unos años era bastante peor, y seguro quemas de uno ha tenido que sufrir estos problemas más de una vez.

¿Qué les ha pasado a los acentos y a las eñes?

¿Cuantas veces nos han hecho, o nos hemos hecho está pregunta? Muchas veces la respuesta suele ser la misma, “a mi en mi ordenador me sale bien, espera que voy a mirar qué codificación de caracteres tienes en el navegador, aquí esta, lo tienes en ISO-8859 y para qué salga bien tiene que estar en UTF-8”. El caso anterior, suele pasar cuando se usan los caracteres tal cual, sin usar las entidades HTML, y se nos olvida poner el tipo de codificación en el cabecera, y con eso en principio, si los clientes tienen la codificación en automático no hay problema.
Lo qué a veces puede suponer un problema, es sí obtenemos los datos de un sistema Windows y lo procesamos en un sistema *nix. En estos casos, sobre todo sí la base de datos es antigua, como Paradox o db2, que nos encontremos que los datos que nos devuelve, es probable que estén en CP1252, que es prácticamente lo mismo que el ISO-8859-1, pero puede que a la hora de procesarlo nos de alguna sorpresa. Para estos casos especiales en los cuales no hay manera que nos salgan los datos bien, encontré googleando la siguiente página en la cual nos sale una tabla de equivalencias que nos puede ayudar en algún caso desesperado.
http://www.i18nqa.com/debug/utf8-debug.html#dbg

Anuncios

Determinar y cambiar la codificación de un fichero – Linux Tips

Puede ser que alguna vez nos sea útil saber cual es la codificación de un fichero, y para conocerla podemos usar el comando file


file -bi test.txt

text/plain; charset=us-ascii

 

 

El ejemplo anterior nos dice que es un fichero de texto y que su codificación es us-ascii.

Si queremos cambiar la codificación de ese fichero podemos utilizar o bien el comando iconv o recode.


iconv -f ascii -t utf8 test.txt > testUTF8.txt

 

 


recode UTF-8 test.txt

Ahora nuestro fichero esta codificado en UTF-8.

Articulo original en inglés

http://mindspill.net/computing/linux-notes/determine-and-change-file-character-encoding/

 

 

 

Enhanced by Zemanta

El atributo Charset – HTML5 Tips

Uno de los atributos que debemos especificar en toda pagina web es el atributo Charset, este va a definir que tipo de caracteres vamos a utilizar en la web, para que el navegador lo detecte y lo visualice correctamente.

Este atributo, en HTML4 lo definimos de la siguiente manera


<meta http-equiv="content-type" content="text/html; charset=UTF-8">

Con HTML5 definir se ha introducido el atributo charset el y es mas sencillo


<meta class="charset="UTF-8">

Para asegurarnos que todos los navegadores leen la propiedad de codificación de caracteres, la declaración de este debe ser incluida en los primeros 512 caracteres de nuestro documento, es decir, para evitar problemas, debería definirse inmediatamente después de la etiqueta head.

W3schools HTML meta tag

Enhanced by Zemanta

Capitalizando utf-8 – PHP Tips

Una de las cosas con las que nos tenemos que pelear muchas veces es el tema de la codificación de caracteres, generalmente esto lo solucionamos con el utf8_encode o el utf8_decode, pero en algún caso puede suceder que nos sirva pero que nos salgan resultados no deseados. Pongamos el caso siguiente, tenemos en la base de datos el nombre y apellidos de un cliente y lo tenemos en mayúsculas, y queremos recuperar ese dato para mostrarlo y lo queremos mostrar capitalizado, para realizar esto haríamos lo siguiente:


$string = "RUBÉN YAGÜE ESPAÑA";

$string = ucwords(strtolower(utf8_encode($string)));

echo $string; // Mostraria RubÈn YagÜe EspaÑa

Seguramente si nos vemos en este escenario lo mas rápido seria optar por mostrarlo todo en mayúsculas y ya, pero existe una manera de hacerlo bien.

Buscando por las funciones de PHP he encontrado las funciones mb_* las cuales nos van a ayudar a conseguir nuestro objetivo.

A continuación pongo la función que me he creado para realizar esto

function capitalize($string)
{
    if (mb_detect_encoding($string) === 'UTF-8') {
        $string = mb_convert_case(utf8_encode($string), MB_CASE_TITLE, 'UTF-8');
    } else {
        $string = mb_convert_case($string, MB_CASE_TITLE, 'UTF-8');
    }
    return $string;
}

Esta función me detecta si la codificación de la cadena es UTF-8, si lo es utilizando la función
mb_conver_case y codificando la cadena con utf8_encode nos creara la cadena final capitalizada
correctamente.

Formato moneda con PHP – PHP Tips

The PHP logo displaying the Handel Gothic font.
Image via Wikipedia

Con la función money_format  money_format( $formato, $numero ),  podemos convertir un numero en el formato de moneda sin necesidad de estar agregando el símbolo, establecer el numero de decimales que tendrá el numero, el separador de miles y el separador de decimales. En formato lo mas sencillo es poner “%i” o “%n” siendo la primera el formato internacional para la configuración regional y la segunda el formato nacional para la configuración regional.

Estas opciones las coges de las locales que tengamos definidas en el sistema, y aquí viene lo divertido de la historia.

Primero establecemos el formato monetario con setlocale.

$numero = 12345.67;
setlocale(LC_MONETARY, 'es_ES');
echo money_format('%i', $numero) ."\n"; // devuelve 12.345,6,7 EUR
echo money_format('%n', $numero) ."\n"; //devuelve 12.345,67 €

Es posible que probéis estos ejemplos y no funcionen, uno de los motivos es si estais usando ubuntu o cualquier distro basada en Debian, en estas distros hay que poner en vez de es_ES , es_ES.UTF-8, o puede que estéis probando esta función en windows y no funcione a lo cual me remito a lo que dice la documentacion de PHP:

“La función money_format() sólo está definida si el sistema tiene capacidad strfmon. Por ejemplo, Windows no lo hace, así que money_format() no está definido en Windows.”

Por lo tanto si tenemos la aplicación corriendo en un windows no podremos utilizar esta función tan util.

+ Info: http://es.php.net/manual/es/function.money-format.php

UTF-8 Por defecto en nuestras conexiones PHP:MySQL Tips

Conexión a MySQL clasica

$con = mysql_connect ("localhost","user","password") or die (mysql_error()); // establecemos la conexion
mysql_set_charset('utf8', $con); // establecemos el Charset
$dbname = "midb"; 
mysql_select_db($dbname, $con); // establecemos la base de datos por defecto
// Consulta de ejemplo
$sql = "Select * from mitabla";
// como mysql_db_query esta deprecated tenemos que acostumbrarnos a usar el mysql_query
$consulta = mysql_query($sql,$con); // asi ya no es necesario usar el $dbname en todas las consultas

Conexion a MySQL con Zend_Dd

require_once 'Zend/Loader/Autoloader.php'; // Para que me haga la autocarga de Zend
Zend_Loader_Autoloader::getInstance(); // Establece la autocarga
$pdoParams = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');
$this->db = Zend_Db::factory('Pdo_Mysql',array(
    'host'  =>  'localhost',
    'username'  =>  'user',
    'password'  =>  'password',
    'dbname'    =>  'midb',
    'driver_options' => $pdoParams
));