2008-10-28 19 views
5

Mi cliente tiene una antigua base de datos MS SQL 2000 que usa varios campos (50) para almacenar nombres. Trató de usar esta base de datos para capturar algunos datos (a través de un formulario web). Algunos de los rellenos de formularios son de otros países, y los campos varchar se volvieron chiflados cuando algunas de estas personas ingresaron sus nombres. ¿Es posible recuperar los datos de alguna manera? ¿Tal vez adivinando qué personaje debería estar basado en lo que resolvió en ASCII/varchar y en el país de donde proviene la persona? Algunos de los datos:¿Puedo recuperar caracteres internacionales almacenados erróneamente en un campo varchar?

Nombre/País/¿Nombre o apellido?
Jia ™ A/CZE/F
Torbjörn/FIN/F
Huszár/HUN/L
Jürgen/DEU/F
Müller/CHE/L
Bumbálková/CZE/L
Doležal/CZE/L
Loïc/DEU/L

Por cierto, el formulario web especifica este tipo de contenido:

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

Respuesta

6

Trabajando desde el 5to ejemplo.

à es ascii # 195 (C3). ¼ es ascii # 188 (BC).

Supongo que Müller debe ser Müller.

Si esto es UTF-8, basado en http://en.wikipedia.org/wiki/UTF-8#Description

Tenemos C3 AC = 1100 0011 1011 1100

Aplicando el UTF-8 mapeo:

(110) 00011 (10) 11 1100

00FC que es Unicode ü

U + 00FC (ver http://en.wikipedia.org/wiki/Latin_characters_in_Unicode)

Me parece que se puede trabajar a través de esta programación.

Ahora Resolver el primer ejemplo:

Jia ™ ã era en realidad Jia ™ A (el carácter final no se muestra).

Haciendo caso omiso de la Ji, que es correcto,

C5 99 c3 AD

(110) 0 0 101 (10) 01 1001 (110) 0 0 011 (10) 10 1101

0159 00ED

RI

Así que el nombre es: Jiří. Wikipedia dice que r especial es checo y también lo es i. Además, si googleo Jiří (http://www.google.com/search?q=Ji%C5%99%C3%AD&ie=utf-8&oe=utf-8) recibo muchos hits. Estamos en un ganador aquí.

El segundo ejemplo, Torbjörn, se adapta muy bien a Torbjörn, lo que suena convincente.

En mi humilde opinión no hay una gran necesidad de verificación humana de estos, parecen funcionar.

+0

Con respecto a "Jiå ™ ã": El nombre real se pegará a continuación. Por alguna razón, el As se recuperó con mayúsculas (originalmente estaban en mayúscula) y el último carácter se truncó. JiÅ ™ Ã – Chris

+0

Gracias. He actualizado la solución ahora. Solo me estoy familiarizando con Unicode. Ahora, de vuelta al trabajo :) –

+0

Sí, utf-8. Agregó esa información a la pregunta. – Chris

0

Básicamente necesitas pasarlo a través de libiconv, convirtiéndolo a UTF8.

La lista completa de juegos de caracteres dependerá de su aplicación, pero puede hacer algunas conjeturas basadas en el código de país. Comience con this page on WikiPedia.

Advertencia: Necesitará un humano para verificar cada conversión.

0

En relación con los comentarios de Richard: si la página Web que contiene el formulario especifica un conjunto de caracteres (por ejemplo, ISO-8859-1 == Unicode) & codificación (por ejemplo, UTF-8) a continuación, un navegador compatible con los estándares debe enviar datos de formulario usando ese juego de caracteres y codificación. Si sus páginas web especificaron unicode, entonces no debería tener que lidiar con las páginas de códigos de Microsoft aleatorias en los datos; todo debería ser unicode.

+0

Ok, agregué esta información a la pregunta. – Chris

Cuestiones relacionadas