<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DevelopArts &#187; Linux</title>
	<atom:link href="http://www.developarts.com/category/articulos/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.developarts.com</link>
	<description></description>
	<lastBuildDate>Fri, 04 Nov 2011 02:06:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Convertir de ISO-8859-1 a UTF-8</title>
		<link>http://www.developarts.com/convertirde-iso-8851-1-a-utf-8/</link>
		<comments>http://www.developarts.com/convertirde-iso-8851-1-a-utf-8/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 07:34:20 +0000</pubDate>
		<dc:creator>neXus</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Charset]]></category>
		<category><![CDATA[ISO-8859-1]]></category>
		<category><![CDATA[recode]]></category>
		<category><![CDATA[UTF-8]]></category>

		<guid isPermaLink="false">http://www.developarts.com/?p=122</guid>
		<description><![CDATA[Trabajando en uno de mis proyectos, me vi en la necesidad de hacer una conversión completa del Charset de todos mis archivos y bases de datos de <strong>ISO-8859-1</strong> a <strong>UTF-8</strong>. Como era de esperar, en Linux siempre hay una buena solución al alcance de la mano.]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.developarts.com/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/122.png&amp;w=150&amp;h=150&amp;zc=1&amp;ft=jpg' alt='post thumbnail' /></p>
<p>Trabajando en uno de mis proyectos, me vi en la necesidad de hacer una conversión completa del <a href="http://es.wikipedia.org/wiki/Codificaci%C3%B3n_de_caracteres" onclick="return TrackClick('http%3A%2F%2Fes.wikipedia.org%2Fwiki%2FCodificaci%25C3%25B3n_de_caracteres','Charset')" target="_new">Charset</a> de todos mis archivos y bases de datos de <em>ISO-8859-1</em> a <em>UTF-8</em>.<span id="more-122"></span></p>
<p>Pongamos un ejemplo particular; un proyecto con archivos PHP, HTML y JavaScript en una codificación <strong><a href="http://es.wikipedia.org/wiki/ISO/IEC_8859-1" onclick="return TrackClick('http%3A%2F%2Fes.wikipedia.org%2Fwiki%2FISO%2FIEC_8859-1','ISO-8859-1')" target="_new">ISO-8859-1</a></strong> y una base de datos MySQL con una codificación <strong><a href="http://dev.mysql.com/doc/refman/5.0/es/charset-we-sets.html" onclick="return TrackClick('http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.0%2Fes%2Fcharset-we-sets.html','latin1_spanish_ci')" target="_new">latin1_spanish_ci</a></strong>. El objetivo es: convertir los archivos del proyecto a <strong><a href="http://es.wikipedia.org/wiki/UTF-8" onclick="return TrackClick('http%3A%2F%2Fes.wikipedia.org%2Fwiki%2FUTF-8','UTF-8')" target="_new">UTF-8</a></strong> y la base de datos a <strong><a href="http://dev.mysql.com/doc/refman/5.0/es/charset-unicode-sets.html" onclick="return TrackClick('http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.0%2Fes%2Fcharset-unicode-sets.html','utf8_general_ci')" target="_new">utf8_general_ci</a></strong>.</p>
<div class="error"><strong>CUIDADO</strong>, tanto en la conversión de archivos como en la base de datos; los archivos originales se sobreescribirán, por lo que es altamente recomendable que se realice un <strong>RESPALDO</strong> antes de continuar.</div>
<p>En nuestro ejemplo definiremos la ubicación de los archivos en <em>&#8220;/proyecto/html&#8221;</em> y el nombre de la base de datos es &#8220;<em>db_proyecto</em>&#8220;.</p>
<p>Según el manual: <strong>GNU &#8216;recode&#8217;</strong> convierte ficheros entre varios juegos de caracteres y su modo de empleo es la siguiente:</p>
<p><code>recode [OPCIÓN]... [ [JUEGO] | PETICIÓN [FICHERO]... ]</code></p>
<p>Por lo que será necesario verificar que el comando lo tengamos instalado en nuestro Linux y de esta forma podremos continuar con nuestro comando de conversión de archivos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>proyecto<span style="color: #000000; font-weight: bold;">/</span>html \<span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #660033;">-name</span> <span style="color: #ff0000;">&quot;*.php&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #660033;">-name</span> <span style="color: #ff0000;">&quot;*.html&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #660033;">-name</span> <span style="color: #ff0000;">&quot;*.js&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #660033;">-name</span> <span style="color: #ff0000;">&quot;*.css&quot;</span> \<span style="color: #7a0874; font-weight: bold;">&#41;</span>  <span style="color: #660033;">-exec</span> recode <span style="color: #660033;">-d</span> ISO-<span style="color: #000000;">8859</span>-<span style="color: #000000;">1</span>..UTF-<span style="color: #000000;">8</span> <span style="color: #ff0000;">'{}'</span> \;
<span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>proyecto<span style="color: #000000; font-weight: bold;">/</span>html \<span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #660033;">-name</span> <span style="color: #ff0000;">&quot;*.php&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #660033;">-name</span> <span style="color: #ff0000;">&quot;*.html&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #660033;">-name</span> <span style="color: #ff0000;">&quot;*.js&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #660033;">-name</span> <span style="color: #ff0000;">&quot;*.css&quot;</span> \<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #660033;">-print</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #c20cb9; font-weight: bold;">perl</span> <span style="color: #660033;">-pi</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/iso-8859-1/utf-8/g'</span></pre></td></tr></table></div>

<p>En la <strong>linea 1</strong> &#8220;find&#8221; buscará a partir del directorio <em>&#8220;/proyecto/html&#8221;</em> de forma recursiva todos los archivos con extensión php, html, js y css para aplicarles el <strong>recode</strong>.</p>
<p>En la <strong>linea 2</strong> reemplazamos los textos que hagan referencia a <em>&#8220;iso-8859-1&#8243;</em> por <em>&#8220;utf-8&#8243;</em> ya que tengo algunos headers en las declaraciones de PHP y HTML. Por ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-type:text/plain; charset=iso-8859-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/html; charset=iso-8859-1&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></div></div>

<p>Con <strong>MySQL</strong> tenemos varias opciones, la primera, que a mi parecer es la más rápida pero no la más elegante es indicarle a la conexión de MySQL que queremos recibir datos en <em>uft8</em> por medio de <a href="http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html" onclick="return TrackClick('http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Fcharset-connection.html','SET+NAMES')" target="_new"><code>SET NAMES</code></a>, por lo que en nuestra conexión, justo después de la selección de la base de datos insertamos la siguiente linea:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">mysql_query</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SET NAMES 'utf8'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Otra opción es usar la función <a href="http://www.php.net/manual/en/function.mysql-set-charset.php" onclick="return TrackClick('http%3A%2F%2Fwww.php.net%2Fmanual%2Fen%2Ffunction.mysql-set-charset.php','mysql_set_charset')" target="_new">mysql_set_charset</a></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">mysql_set_charset</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'utf8'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$conn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Con esto, <em>automágicamente</em> MySQL envía los datos en la codificación seleccionada. Sin embargo quiero ir más allá, convertir toda la base de datos a <em>utf8</em> y estandarizar de esta forma todo mi proyecto.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>3
4
5
6
7
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">mysqldump <span style="color: #660033;">-h</span> localhost <span style="color: #660033;">-u</span> usuario <span style="color: #660033;">-p</span> <span style="color: #660033;">--add-drop-table</span> <span style="color: #660033;">--create-options</span> <span style="color: #660033;">--extended-insert</span> <span style="color: #660033;">--routines</span> db_proyecto <span style="color: #000000; font-weight: bold;">&gt;</span> db_proyecto.sql
recode <span style="color: #660033;">-d</span> ISO-<span style="color: #000000;">8859</span>-<span style="color: #000000;">1</span>..UTF-<span style="color: #000000;">8</span> db_proyecto.sql
<span style="color: #c20cb9; font-weight: bold;">perl</span> <span style="color: #660033;">-pi</span> <span style="color: #660033;">-w</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/CHARSET=latin1/CHARSET=utf8/g;'</span> db_proyecto.sql
<span style="color: #c20cb9; font-weight: bold;">perl</span> <span style="color: #660033;">-pi</span> <span style="color: #660033;">-w</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/COLLATE=latin1_spanish_ci/COLLATE=utf8_general_ci/g;'</span> db_proyecto.sql
mysql <span style="color: #660033;">-u</span> usuario <span style="color: #660033;">-p</span> db_proyecto <span style="color: #000000; font-weight: bold;">&lt;</span> db_proyecto.sql</pre></td></tr></table></div>

<p>En la <strong>linea 3</strong> realizo un respaldo de la base de datos en un archivo llamado &#8220;db_proyecto.sql&#8221;. </p>
<p>En la <strong>linea 4</strong> realizamos la conversión del archivo a <em>UTF-8</em>.</p>
<p>En la <strong>linea 5 y 6</strong> cambiamos dentro del archivo todo lo que sea <em>&#8220;latin1&#8243;</em> y <em>&#8220;latin1_spanish_ci&#8221;</em> por <em>&#8220;utf8&#8243;</em> y <em>&#8220;utf8_general_ci&#8221;</em> respectivamente. </p>
<p>Por último, en la <strong>linea 7</strong> volvemos a incluir la base de datos con los cambios efectuados.</p>
<p>Después de hacer la conversión, mi proyecto quedó en perfectas condiciones, salvo por algunos detalles que son de bajo impacto y tiene que ver más con librerías muy especificas que no vale la pena comentar en este artículo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developarts.com/convertirde-iso-8851-1-a-utf-8/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

