FileSystemObject - Unicode-Dateien lesen

8

Klassischer ASP, VBScript-Kontext.

Eine Menge von Artikeln einschließlich dieses Microsoft , sagen Sie kann nicht FileSystemObject verwenden, um Unicode-Dateien zu lesen.

Ich habe dieses Problem vor einiger Zeit bemerkt, also habe ich stattdessen auf ADODB.Stream umgestellt, im ReadText Beispiel hier , anstatt FileSystemObject.OpenTextFile ( die einen letzten Parameter akzeptiert, der angibt, ob die Datei als Unicode geöffnet werden soll, aber nicht funktioniert.)

Allerdings führt ADODB.Stream zu einer schmerzhaften Situation, wenn Sie versuchen, eine Datei in einer UNC-Dateifreigabe zu lesen (Probleme mit Berechtigungen). Als ich dies untersuchte, stolperte ich über den folgenden Ansatz, der a) mit Unicode-Dateien und b) über UNC-Fileshares hinweg funktioniert:

%Vor%

Das verwendet das FSO, um eine Unicode-Datei ohne irgendein offensichtliches Problem zu lesen, deshalb bin ich bezüglich aller Verweise einschließlich MS verwirrt, sagend, dass Sie das FSO nicht verwenden können, um Unicode-Dateien zu lesen.

Hat jemand anderes diesen Ansatz zum Lesen von Unicode-Dateien verwendet? Gibt es irgendwelche verborgenen Fehler, die ich vermisse, oder können Sie wirklich Unicode-Dateien mit FSO lesen?

    
AdaTheDev 11.09.2009, 11:21
quelle

5 Antworten

3

Ja, diese Dokumentation ist veraltet. Die Scripting-Komponente hat in den frühen Tagen eine Reihe von Änderungen durchlaufen (einige von ihnen haben die Änderungen bei früher Bindung aufgehoben), aber seit mindestens WK2000 SP4 und XP SP2 war es sehr stabil.

Sei einfach vorsichtig, was du mit Unicode meinst. Manchmal wird das Wort Unicode breiter verwendet und kann jede Unicode-Codierung abdecken. FSO liest beispielsweise nicht UTF8-Unicode-Kodierungen. Dafür müssten Sie auf ADODB.Stream zurückgreifen.

    
AnthonyWJones 11.09.2009, 13:02
quelle
6

Ich glaube, MS gibt offiziell nicht an, dass es Unicode unterstützt, weil:

  1. Es erkennt keine Unicode-Dateien mit der Byte-Reihenfolge-Markierung am Anfang der Datei und
  2. Es unterstützt nur Little-Endian UTF-16-Unicode-Dateien (und Sie müssen die Byte-Reihenfolge-Markierung entfernen, falls vorhanden).

Hier ist ein Beispielcode, den ich erfolgreich (für ein paar Jahre) verwendet habe, um Unicode-Dateien mit FSO automatisch zu erkennen und zu lesen (vorausgesetzt, sie sind Little-Endian und enthalten die BOM):

%Vor%     
Tao 23.09.2009 11:21
quelle
4
%Vor%     
Daumantas 08.11.2012 14:18
quelle
0

Ich würde sagen, wenn es funktioniert, benutze es; -)

Ich bemerke, dass der MS Artikel, auf den Sie verweisen, aus dem Windows 2000 (!) Scripting Guide stammt. Vielleicht ist es veraltet.

    
Tor Haugen 11.09.2009 11:29
quelle
0

Ich schreibe ein Windows 7-Gadget und führe das gleiche Problem ein, und wenn es möglich ist, kannst du deine Dateien einfach in eine andere Kodierung umwandeln, zum Beispiel: ANSI-Kodierung "windows-1251". Mit dieser Codierung funktioniert es gut.

Wenn Sie dies zum Schreiben einer Site verwenden, ist es besser, einen anderen Entwicklungsansatz zu verwenden, der diese Objekte vermeidet.

    
Alexanderius 28.12.2010 19:39
quelle

Tags und Links