2011-07-07 9 views
6

Mam aplikację VB6, która wykonuje listę katalogów i wybiera nazwy plików. Niektóre z nich są akcentowane, na przykład "Guimarães.txt" (małe A z tyldą). Zarówno funkcja VB Dir, jak i funkcje FileSystemObject nie są w stanie rozpoznać akcentowanego znaku, a zamiast tego zwracają nazwę pliku jako "Guimar? Es.pdf", więc nie mogę potem otworzyć pliku. Prawidłowo widzę plik w Eksploratorze Windows:Czytanie akcentowanych nazw plików w VB6

Dzieje się tak tylko w jednym środowisku na żywo z systemem Windows Server 2003 R2. W naszych systemach testowych możemy poprawnie odczytać plik, chociaż są to głównie Windows 2008 i Windows 7. Początkowo sądziłem, że to zależy od wersji FSO, ale ponieważ "Dir" daje takie same wyniki, już nie myślę. Ponadto, gdy zapisuję nazwę pliku w pliku dziennika, jest on również niepoprawny. Sądzę więc, że na bardzo wczesnym etapie nie jest on w stanie obsłużyć postaci i zastępuje ją znakiem zapytania.

To, co muszę ustalić, jest przyczyną problemu: czy jest to wersja systemu Windows lub moje ustawienia regionalne (których nie mogę wyświetlić, ponieważ moje konto jest zablokowane) i co mogę zrobić aby rozwiązać problem. Na razie poprosiłem użytkowników, aby nie używali tych znaków, ale nie jest to rozwiązanie długoterminowe.

Dzięki.

+2

Podejrzewam, że problem jest związany z VB6 i brakiem wsparcia dla Unicode. –

+4

Spróbuj ustawić "Język dla programów innych niż Unicode" w Ustawieniach regionalnych na Portugalski i sprawdź, czy to rozwiązuje problem. Uważam, że tak powinno być. Niestety, wątpię, aby stary MS VB Runtime obsługiwał Unicode, tak jak mówi Cody. –

+0

Przyczyną jest fakt, że VB6 próbuje użyć tylko jednego bajtu do kodowania 100 000 różnych znaków. Niektóre listy zostaną utracone. Zmiana języka zmienia tylko to, które litery stracą. Ale ã? To jest U + 00E3, to jest w ISO-8859-1/CP1252, który jest zdecydowanie najbardziej rozpowszechniony. – MSalters

Odpowiedz

2

Ok, odczytana nazwa dysku używa Unicode. Kiedy próbujesz to wyświetlić, używana czcionka nie obsługuje tego glifu, więc pokazuje "?", Ale zapisanie go na dysk zapisuje poprawną reprezentację. Po przejściu do funkcji plików jest ona "konwertowana" na MBCS lub inny zestaw znaków, który następnie ulega napięciu.

Możesz zmienić kod, aby korzystać z natywnych wywołań funkcji Win32 API lub po prostu zmienić "język dla programów nieobsługujących kodów Unicode", aby dopasować język używany w nazwie pliku.

+0

Dzięki. Jak wspomniano powyżej, uważam, że jest to spowodowane domyślnym chińskim. Jednak czy "Język dla programów nieobsługujących Unicode" zdecydowanie ma zastosowanie do VB6? Pytam, ponieważ jego możliwości unicode jest nieco niejasne. – olippold

+1

Sam VB6 jest unicode, ale niestety, większość jego interakcji ze światem zewnętrznym odbywa się za pomocą interfejsów, które konwertują do/z Unicode na znaki wielobajtowe (w tym miejscu wchodzą "aplikacje non-kodowe") – Deanna