2012-08-19 24 views
6

Estoy usando libretos para recuperar datos de mi servidor RETS. De alguna manera, los libretos El método de codificación no funciona y recibo algunos caracteres extraños en mi salida. Noté que los caracteres como '' 'se reemplazan por' '. No puedo encontrar una solución para los libretas, así que decidí reemplazar dichos elementos con los valores reales después de descargar los datos. Lo que necesito es una lista de esa cadena de basura y sus caracteres equivalentes. Busqué en Google esto pero no encontré ningún recurso. ¿Puede alguien señalarme la lista de esas cartas basura y sus valores reales o una pieza de código que puede generar esa carta?lista de caracteres basura como â € €

Gracias

Respuesta

10

Buscar el término "UTF-8", porque eso es lo que se está viendo.

UTF-8 es una forma de representar caracteres Unicode como una secuencia de bytes. (Los "caracteres Unicode" son la gama completa de letras y símbolos utilizados en todos los idiomas humanos). Normalmente, un carácter Unicode se convierte en 1, 2 o 3 bytes en UTF-8. Cuando esos bytes (números del 0 al 255) se muestran con el conjunto de caracteres que normalmente utiliza Windows, aparecen como "basura", en este caso, 3 "letras basura" que son realmente los 3 bytes de una codificación UTF-8 .

En su ejemplo, comenzó con el carácter de comillas inteligentes . Su representación en Unicode es el número , o U + 2019 (2019 es el hexadecimal de 8217). (Búsqueda de "Unicode" para obtener una lista completa de caracteres Unicode y sus números.) La representación UTF-8 de la serie 8217 es la secuencia de tres bytes , , . Y cuando muestra esos tres bytes como caracteres, utilizando la codificación de caracteres "CP-1252" de Windows (la forma habitual de mostrar texto en Windows en EE. UU.), Aparecen como ’. (Busque "CP-1252" para ver una tabla de bytes y caracteres.)

No tengo ninguna lista para usted. Pero podría crear uno si escribió un programa en un idioma que tiene soporte integrado para Unicode y UTF-8. Todo lo que puedo hacer es explicar lo que estás viendo.

Si hay una manera de decirle a los libretos que utilicen UTF-8 durante la descarga, eso podría resolver automáticamente su problema. No sé nada sobre libretos, pero ahora que conoces el término "UTF-8" es posible que puedas avanzar.

+2

+1 Concur y enfatice: Lo más probable es que el servidor esté haciendo lo correcto, y necesita adaptar su código o sus herramientas. En el caso más simple, tal vez todo lo que se necesita es configurar la herramienta de visualización que está utilizando para inspeccionar los resultados para visualizar UTF-8 en lugar de CP-1252 o ISO-8859-1 o lo que sea. – tripleee

+0

De acuerdo. Si está viendo la salida usando un navegador web como Internet Explorer, puede cambiar el conjunto de caracteres con una simple opción de menú. (Vaya a "Ver" y seleccione "Codificación", luego cambie de "Europeo occidental (Windows)" a "UTF-8". También puede desactivar la opción "Seleccionar automáticamente") Cuando se establece la codificación para UTF-8, Internet Explorer tomará los 3 "caracteres basura", los interpretará como bytes UTF-8, los convertirá nuevamente en un carácter Unicode y mostrará el carácter Unicode. En este caso, los libretos no necesitan cambiar; solo cambias la forma en que ves la salida. – librik

+0

gracias por aclarar. LIBRETS proporciona un método para anular la codificación, pero parece que no funciona. El foro de Librets es patético y no permiten que nadie publique preguntas a menos que aprueben al usuario registrado y no me han aprobado incluso después de un mes. – ZafarYousafi

0

recordatorio Pregunta:.

" ... me di cuenta de personajes como ''' se sustituye por un € ™ ... decidí sustituir tales characeters basura con valores reales después de la descarga de datos Lo Lo que necesito es una lista de esa cadena de basura y sus caracteres equivalentes ".

En sentido estricto se trata de esta parte:

"Lo que necesito es una lista de tales cadena de basura y sus equivalentes caracteres."

Usando php, puede generar estos caracteres y su equivalencia. Trabajar con todos los 1,111,998 puntos Unicode o 109,449 símbolos Utf8 no es práctico. Puede usar el rango ASCII en el siguiente ciclo entre & # 128 y & # 258 u otro rango que sea más relevante para su contexto.

<?php 
    for ($i=128; $i<258; $i++) 
    $tmp1 .= "<tr><td>".htmlentities("&#$i;")."</td><td>".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."</td><td>&#".$i.";</td></tr>"; 

    echo "<table border=1> 
    <tr><td>&#</td><td>&quot;Garbage&quot;</td><td>symbol</td></tr>"; 
    echo $tmp1; 
    echo "</table>"; 
?> 

Por experiencia, en un contexto ASCII, la mayoría de los símbolos "basura" se originan en el rango & # 128 a # 257 & + (rara vez) & # 8129 a # 8246 &.

Para que se muestren los símbolos "basura", el juego de caracteres de la página html debe establecerse en iso-1 o en cualquier otro juego de caracteres que haya causado el problema en primer lugar. No se mostrarán si el juego de caracteres está configurado en utf-8.

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 

.

"i decidió sustituir tales characeters basura con valores reales después de la descarga de datos"

no se puede deshacer la "basura" con utf8_decode php(), lo que en realidad crear más "basura" en la ya "basura". Pero puede usar la búsqueda simple y rápida y reemplazar la función php str_replace().

Primero, genere 2 matrices para cada conjunto de símbolos "basura" que desea reemplazar. La primera matriz es el término de búsqueda:

<?php 
    //ISO 8859-1 (Latin-1) special chars are found in the range 128 to 257 
    $tmp1 = "\$SearchArr = array("; 
    for ($i=128; $i<258; $i++) 
    $tmp1 .= "\"".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."\", "; 
    $tmp1 = substr($tmp1,0,strlen($tmp1)-2);//erases last comma 
    $tmp1 .= ");"; 
    $tmp1 = htmlentities($tmp1,ENT_NOQUOTES,"utf-8"); 
?> 

la segunda matriz es reemplazar el término:

<?php 
    //Adapt for your relevant range. 
    $tmp2 = "\$ReplaceArr = array(\n"; 
    for ($i=128; $i<258; $i++) 
    $tmp2 .= "\"&#".$i.";\", "; 
    $tmp2 = substr($tmp2,0,strlen($tmp2)-2);//erases last comma 
    $tmp2 .= ");"; 

    echo $tmp1."\n<br><br>\n"; 
    echo $tmp2."\n"; 
?> 

Ahora, tienes 2 matrices que se pueden copiar y pegar a utilizar y reutilizar para limpiar ninguna de sus cuerdas infectados de esta manera:

$InfectedString = str_replace($SearchArr,$ReplaceArr,$InfectedString); 

Nota: utf8_decode() no es de ayuda para la limpieza de los símbolos "basura". Pero, puede usarse para prevenir una mayor contaminación. Alternativamente, una función mb_ puede ser útil.

Cuestiones relacionadas