Avatar billede bajerfar Nybegynder
01. marts 2009 - 15:44 Der er 10 kommentarer

FileSystemObject encoding

Hey eksperter

Jeg har behov for at skrive en textfil på serveren med enten FileSystemObject eller ADODB.Stream. Teksten indeholder kinesiske tegn, hvilket selvfølgelig giver mig en MASSE problemer! Det største problem er, at når jeg smider min tekst ind i den oprettede tekstfil, kommer al teksten ud som små firkanter i den anden ende. Jeg har prøvet en del forskellige metoder (bl.a. set tfile=fs.CreateTextFile(Server.MapPath(filePath), false, true), men kan simpelthen ikke løse problemet.

Kan nogen hjælpe?
Avatar billede olebole Juniormester
01. marts 2009 - 16:21 #1
<ole>

Hvilet tegnsæt bruger du - og hvor/hvordan bruger du det?

/mvh
</bole>
Avatar billede bajerfar Nybegynder
01. marts 2009 - 17:10 #2
Øverst på siden:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
Response.CharSet = "utf-8"
Avatar billede olebole Juniormester
01. marts 2009 - 18:14 #3
Tja, når du skaber filen med true som tredie argument, burde du jo skabe den som Unicode.

Når du samtig sætter utf-8 som tegnsæt i asp-dokumentet - og hvis du sætter en utf-8 meta i dokumentet - så burde du ikke have problemer med tegnsættet.

Noget kunne tyde på, det ikke er Unicode-indhold du fylder i filen. Hvor har du indholdet fra?
Avatar billede olebole Juniormester
01. marts 2009 - 18:24 #4
Ellers kan du prøve noget à la:

Dim oStream
Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Open
oStream.CharSet = "UTF-8"
oStream.WriteText strContent
oStream.SaveToFile Server.MapPath(strFilepath), 2
oStream.Close
Avatar billede bajerfar Nybegynder
02. marts 2009 - 10:05 #5
Først og fremmest 1000 tak for hjælpen!

Indholdet kommer fra en textfil (.inc) og er ren tekst. Dvs ingen kode. Textfilen er gemt som en UTF-8 fil.

Jeg prøver lige med ADO, som du foreslår, senere i dag.
Avatar billede olebole Juniormester
02. marts 2009 - 14:24 #6
Nu har jeg for sjov lige testet i JScript med denne kode:

<script type="text/javascript">
var fs = new ActiveXObject("Scripting.FileSystemObject");
var origFile = fs.OpenTextFile("test.txt", 1, false, -1);
var sTxt = origFile.ReadAll();
origFile.Close();
var tfile = fs.CreateTextFile("test2.txt", false, true);
tfile.Write(sTxt);
tfile.Close();
fs = null;
</script>

Det dokument, der oprettes, er kodet som Unicode UCS-2 Little Endian (vælg 'Unicode' i 'Gem Som' dialogen i Notepad). Hvis udgangs dokumentet ('test.txt' i mit eksempel) også er kodet som sådan, fungerer scriptet. Er det derimod kodet som utf-8 - hvad dit dokument nok er - går det galt  :o|

Bruger jeg eksemplet med ADODB's Stream objektet, gemmes filen som utf-8, men specialtegnene bevares kun, hvis udgangspunktet igen er Unicode Little Endian
Avatar billede olebole Juniormester
02. marts 2009 - 14:25 #7
- og testkoden for Stream objektet så sådan ud:

<script type="text/javascript">
var fs = new ActiveXObject("Scripting.FileSystemObject");
var origFile = fs.OpenTextFile("test.txt", 1, false, -1);
var sTxt = origFile.ReadAll();
origFile.Close();

var oStream = new ActiveXObject("ADODB.Stream");
oStream.Open();
oStream.CharSet = "UTF-8";
oStream.WriteText(sTxt);
oStream.SaveToFile("test2.txt", 2);
oStream.Close();
fs = oStream = null;
</script>

PS: Dokumentet skal afvikles som en .hta-fil. Ellers forhindrer Explorers sikkerhed, at filen afvikles  ;o)
Avatar billede olebole Juniormester
02. marts 2009 - 14:38 #8
- og lykkedes det ...!!!  =)

<script type="text/javascript">
var oStream = new ActiveXObject("ADODB.Stream");
oStream.Open();
oStream.LoadFromFile("test.txt");
oStream.CharSet = "UTF-8";
oStream.SaveToFile("test2.txt", 2);
oStream.Close();
fs = oStream = null;
</script>

Du skal dog være opmærksom på, originalfilen skal være gemt som utf-8 uden BOM ( http://en.wikipedia.org/wiki/Byte_Order_Mark ).

Er det ikke tilfældet, vil de tre BOM-tegn optræde som en firkant i begyndelsen af det nyoprettede dokument.
Avatar billede olebole Juniormester
02. marts 2009 - 14:42 #9
- og i VBS ser det vel sådan noget lignende ud:

Dim oStream
Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Open
oStream.LoadFromFile "test.txt"
oStream.CharSet = "UTF-8"
oStream.SaveToFile "test2.txt", 2
oStream.Close
Set oStream = Nothing

- omend du nok lige skal mapPath'e stierne  ;o)
Avatar billede bajerfar Nybegynder
16. marts 2009 - 21:43 #10
Hey oloebole

Først og fremmest må jeg beklage det MEGET sene svar. Håber du stadig har mod på at gi' et par gode råd :-)

Jeg har haft lejlighed til at forsøge mig med dine forslag, og det ser ud til at virke :-), dog har jeg store problemer med at fjerne BOM tegnene i starten af min tekst-streng. Jeg har prøvet med adskillige forskellige text-editors, som skulle kunne gemme filer uden BOM, dog uden held. Uanset hvad jeg gør, får jeg to firkanter i starten af min text-streng idét jeg gemmer strengen i min text fil.

Kender du en metode, som stensikkert virker?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester