/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste