2011-12-29 17 views
6

Fondo rápido: Heredé un archivo de volcado sql grande que contiene una combinación de texto en inglés y árabe y (creo) que se exportó originalmente usando 'latin1'. Cambié todas las apariciones de 'latin1' a 'utf8' antes de importar el archivo. El texto árabe no aparece correctamente en phpmyadmin (que supongo que es normal), pero cuando he cargado el texto de una página web con el siguiente ...Codificación de caracteres en árabe Problema: UTF-8 versus Windows-1256

<meta http-equiv='Content-Type' content='text/html; charset=windows-1256'/> 

... todo se veía bien y el texto árabe perfectamente presentado.


Problema: Mi cliente es muy muy muy exigente y no quiere cambiar su ...

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

... el equivalente a 'Windows 1256'. No pensé que esto sería un problema, pero cuando cambié el valor del conjunto de caracteres a 'UTF-8', todos los caracteres arábigos aparecían como diamantes con signos de interrogación. ¿No debería el UTF-8 mostrar correctamente el texto árabe?


Estas son algunas notas acerca de la configuración de mi base de datos:

  • juego de caracteres de base de datos es 'UTF-8'
  • Base de Datos de conexión de la colación es 'utf8_general_ci'
  • Todas las bases de datos, tablas y campos de aplicación tienen cotejado como 'utf8_general_ci'

He estado rastreando el desbordamiento de la pila y otros foros para todo lo relacionado a mi problema He encontrado problemas similares, pero no de las soluciones parecen funcionar para mi situación específica. ¡Espero que alguien pueda ayudar!

+0

¿Se guardan con el Bloc de notas? Si ese es el caso, asegúrese de seleccionar UTF-8 como codificación en lugar de ANSI, de lo contrario, podría perder sus caracteres árabes. – SiN

Respuesta

2

No podemos encontrar el error en su código si no nos muestra su código, por lo que estamos muy limitados en cómo podemos ayudarlo.

Le dijo al navegador que interpretara el documento como UTF-8 en lugar de Windows-1256, pero ¿realmente cambió la codificación utilizada de Windows-1256 a UTF-8?

Por ejemplo,

$ cat a.pl 
use strict; 
use warnings; 
use feature qw(say); 
use charnames ':full'; 

my $enc = $ARGV[0] or die; 
binmode STDOUT, ":encoding($enc)"; 

print <<"__EOI__"; 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=$enc"> 
<title>Foo!</title> 
</head> 
<body dir="rtl"> 
\N{ARABIC LETTER ALEF}\N{ARABIC LETTER LAM}\N{ARABIC LETTER AIN}\N{ARABIC LETTER REH}\N{ARABIC LETTER BEH}\N{ARABIC LETTER YEH}\N{ARABIC LETTER TEH MARBUTA} 
</body> 
</html> 
__EOI__ 

$ perl a.pl UTF-8 > utf8.html 

$ perl a.pl Windows-1256 > cp1256.html 
+0

Vaya, pensé que esta era una pregunta de Perl. La idea se aplica aunque el ejemplo esté en Perl. La codificación utilizada debe coincidir con la codificación especificada. – ikegami

3

Si el documento se ve bien cuando se declaran como Windows-1256 codificado, entonces lo más probable es ventanas-1256 codificado. Por lo tanto, aparentemente no se exportó usando latin1, lo que hubiera sido imposible, ya que latin1 no tiene letras en árabe.

Si se trata de un solo archivo, la forma más sencilla es convertirlo de la codificación windows-1256 a la codificación utf-8, utilizando, p. Ej. Notepad++. (Abra el archivo en él, cambie la codificación, a través del menú Formato de archivo, a árabe, Windows-1256. Luego seleccione Convertir a UTF-8 en el menú Formato de archivo y haga Archivo → Guardar)

Windows-1256 y UTF-8 son codificaciones completamente diferentes, por lo que los datos se descomponen si declaras los datos de Windows-1256 como UTF-8 o viceversa. Solo los caracteres ASCII, como las letras inglesas, tienen la misma representación en ambas codificaciones.

2

Creo que debe volver al punto de partida.Parece que tiene un volcado de base de datos en la codificación Win-1256 y desea trabajar con él en UTF-8 a partir de ahora. También parece que estás usando PHP pero tienes muchas etiquetas irrelevantes en tu pregunta y te falta la más importante, PHP.

Primero, necesitas convertir el volcado de texto en UTF-8 y deberías poder hacer eso con PHP. Lo más probable es que su script de conversión tenga dos pasos, primero lea los bytes Win-1256 y decodifíquelos en cadenas de texto Unicode internas, luego codifique las cadenas de texto Unicode en bytes UTF-8 para dar salida a un nuevo archivo de texto.

Una vez que haya hecho eso, vuelva a realizar la importación de la base de datos como lo hacía antes, pero ahora ha codificado correctamente los datos de entrada como UTF-8.

Después de eso, debería ser tan simple como leer la base de datos y representar una página web con la codificación UTF-8 correcta.

P.S. En realidad, es posible volver a codificar los datos cada vez que los muestra, pero eso no resuelve el problema de tener una base de datos llena de datos codificados incorrectamente.

0

finde para mostrar caracteres árabes correctamente, es necesario convertir el archivo php para UTF-8 sin Bom esto sucedió conmigo, caracteres arábigos se visualizan los diamantes, pero la conversión a UTF-8 sin BOM va a resolver este problema

Cuestiones relacionadas