2011-07-07 11 views
6

que tienen una aplicación VB6 que hace un listado de directorios de una carpeta y recoge los nombres de archivo. Algunos de estos son acentuados, por ejemplo, "Guimarães.txt" (letra pequeña A con tilde). Tanto la función VB Dir como las funciones FileSystemObject no pueden reconocer el carácter acentuado y, en su lugar, devuelven el nombre de archivo como "Guimar? Es.pdf", por lo que posteriormente no puedo abrir el archivo. Puedo ver el archivo correctamente en el Explorador de Windowsnombres de archivo de lectura acentuados en VB6

Esto sólo sucede en un entorno real, que ejecuta Windows Server 2003 R2. En nuestros sistemas de prueba, podemos leer el archivo correctamente, aunque estos son principalmente Windows 2008 y Windows 7. Inicialmente pensé que era la versión de FSO, pero como "Dir" da los mismos resultados, ya no lo creo. Además, cuando escribo el nombre del archivo en un archivo de registro, también es incorrecto. Entonces, creo que en una etapa muy temprana no puede manejar el personaje y lo reemplaza con un signo de interrogación.

Lo que necesito establecer es la causa del problema: ¿se trata de la versión de Windows o mis configuraciones regionales (que no puedo ver, ya que mi cuenta está bloqueada) y qué puedo hacer? para resolver el problema Por ahora, les pedí a los usuarios que no usen estos caracteres, pero esta no es una solución a largo plazo.

Gracias.

+2

sospecharía el problema está relacionado con VB6 y su falta de soporte para Unicode. –

+4

Intenta configurar "Idioma para programas que no sean Unicode" en Configuración regional en portugués y verifica si eso soluciona el problema. Yo creo que debería. Desafortunadamente, dudo que MS VB Runtime sea compatible con Unicode, como dice Cody. –

+0

La causa subyacente es, de hecho, que VB6 intenta usar solo un byte para codificar 100.000 caracteres diferentes. Algunas letras perderán. Cambiar el idioma solo cambia qué letras perderán. Pero ã? Eso es U + 00E3, es decir, en ISO-8859-1/CP1252, que es con mucho el más común. – MSalters

Respuesta

2

Ok, el nombre del archivo que se lee en disco utiliza Unicode. Cuando intenta mostrar esto, la fuente en uso no admite ese glifo, por lo que muestra el "?", Pero escribirlo en el disco escribe la representación correcta. Cuando esto se pasa a las funciones del archivo, se "convierte" a MBCS u otro conjunto de caracteres que luego se convierte en breask.

Puede cambiar su código para utilizar las llamadas a la API Win32 amplia nativa, o simplemente cambiar el "idioma de los programas no UNICODE" para que coincida con el idioma utilizado en el nombre del archivo.

+0

Gracias. Como se señaló anteriormente, creo que se debe a que el chino es el valor predeterminado. Sin embargo, ¿el "Lenguaje para Programas no Unicode" definitivamente se aplica a VB6? Lo pregunto ya que su capacidad Unicode es algo vaga. – olippold

+1

VB6 en sí es Unicode, pero por desgracia, la mayoría de sus interacciones con el mundo exterior es a través de interfaces que convierten a/de Unicode a caracteres de varios bytes (que es donde las "aplicaciones no Unicode" entra en juego) – Deanna

Cuestiones relacionadas