|
| Unicode-problem når jeg sender Fra : Jonas Jørgensen |
Dato : 30-09-01 12:31 |
|
********** KORT BESKRIVELSE: **********
Jeg prøver at uploade en binær fil fra et VB-program til en webserver.
VB-programmet indlæser den binære file og sender den til serveren via en
WinSock control. På serveren er der et ASP-script som
Request.BinaryRead'er filen og giver den videre til en server component,
som så gemmer den. Men filen ser helt forkert ud med mindre jeg kører
den igennem en ASCII-til-Unicode-konvertering to gange før jeg sender
den til serveren. Hjælp mig!
********** LANG BESKRIVELSE: **********
Jeg har brug for at flytte binære filer fra en klient til en server. På
klienten har jeg et VB-program med en WinSock-control. Jeg indlæser
filen med følgende kode:
Open strFilePath For Binary Access Read As #FileNum
FileLength = LOF(FileNum)
ReDim byteData(FileLength)
Get #FileNum, , byteData
Close #FileNum
På serveren har jeg en ASP-fil der henter filen med følgende kode:
RequestBodyLength = Request.TotalBytes
RequestBody = Request.BinaryRead(RequestBodyLength)
Body-delenen af den HTTP request som VB-programmet sender til serveren
har først et par linjer med noget statusinformation som serveren også
skal have. Jeg adskiller dem fra det binære data med Mid([...]).
Derefter opretter jeg en instans af en Server-komponenent og giver den
det binære data som en parameter. Serverkomponenten gemmer så filen med
følgende kode:
FileNum = FreeFile
Open strFileName For Binary Access Write As #FileNum
Put #FileNum, , varData
Close #FileNum
Den binære fil bliver helt forkert og indeholder en masse spørgsmålstegn
og null-karakterer. Hvis jeg derimod to gange kører dataerne igennem en
funktion der konverterer ASCII til Unicode, så vil filen være næsten
rigtig (den vil stadig have nogle få null-karakterer i starten).
ASCII-til-Unicode-funktionen ser sådan her ud:
Function AsciiToUnicode(ByRef pstrAscii)
Dim llngLength
Dim llngIndex
Dim llngAscii
Dim lstrUnicode
llngLength = LenB(pstrAscii)
For llngIndex = 1 To llngLength
llngAscii = AscB(MidB(pstrAscii, llngIndex, 1))
lstrUnicode = lstrUnicode & Chr(llngAscii)
Next
AsciiToUnicode = lstrUnicode
End Function
Hvis jeg bruger denne rutine i ASP-filen i stedet vil filen stadig ikke
virke. Og jeg bliver nødt til at finde en anden løsning end at gøre det
på klienten, for det tager simpelthen for lang tid med store filer, især
fordi jeg skal gøre det to gange - AsciiToUnicode(AsciiToUnicode(data))
- for at det virker. Er der nogen der ved hvorfor dette problem opstår
og hvad jeg kan gøre for at afhjælpe det? På forhånd tusind tak!
--
Med venlig hilsen
Jonas Jørgensen
Chief Software Architect
OnlineTilbud.dk ApS
| |
Tomas Christiansen (30-09-2001)
| Kommentar Fra : Tomas Christiansen |
Dato : 30-09-01 21:51 |
|
Jonas Jørgensen skrev:
> Jeg prøver at uploade en binær fil fra et VB-program til en
webserver.
> ...Men filen ser helt forkert ud...
Har du kigget på StrConv funktionen?
Bemærk især teksten:
"When you're converting from a Byte array in ANSI format to a string,
you should use the StrConv function.
When you're converting from such an array in Unicode format, use an
assignment statement."
Jeg ved ikke om det ka' hjælpe?
-------
Tomas
| |
Jonas Jørgensen (01-10-2001)
| Kommentar Fra : Jonas Jørgensen |
Dato : 01-10-01 13:45 |
|
Tomas Christiansen wrote:
>
> Jonas Jørgensen skrev:
> > Jeg prøver at uploade en binær fil fra et VB-program til en
> webserver.
> > ...Men filen ser helt forkert ud...
>
> Har du kigget på StrConv funktionen?
>
> Bemærk især teksten:
> "When you're converting from a Byte array in ANSI format to a string,
> you should use the StrConv function.
> When you're converting from such an array in Unicode format, use an
> assignment statement."
>
> Jeg ved ikke om det ka' hjælpe?
Det kunne det! Tak!
| |
Jonas Jørgensen (01-10-2001)
| Kommentar Fra : Jonas Jørgensen |
Dato : 01-10-01 16:13 |
|
Jeg har dog stadig et andet problem: Der bliver af en eller anden grund
indsat nogle få (nogle gange 4, andre gange 8) ekstra bytes i starten af
filen. Det jeg ikke kan forstå er at hvis jeg åbner filen med "Open x
For Output" i stedet for "Open x For Binary", så bliver de ekstra bytes
ikke skrevet.
Jeg har prøvet at overføre Access-databaser (.mdb) og EXE-filer på denne
måde, og databaserne kan åbnes, og programmerne kan køres (altså når jeg
åbner For Output). Det på trods af at filen ser meget anderledes ud end
den oprindelige. Når jeg åbner For Binary ser filen derimod ud
fuldstændig som den normale, altså bortset fra de irriterende ekstra
bytes.
Kan jeg bare åbne filen For Output, da det jo lader til at virke?
Betyder det virkelig ikke noget at filen ser så meget anderledes ud? Og
hvordan får jeg ellers de irriterende ekstra bytes til at forsvinde?
Jonas
| |
|
|