Avatar billede mik789 Nybegynder
27. december 2005 - 09:20 Der er 13 kommentarer og
1 løsning

UTF-8 filer sendt som ASCII eller binary?

Jeg har et dokument hvori indgår tegn fra Latin Extended Additional. Jeg har derfor angivet encoding som UTF-8 og gemt dokumentet som sådan. Tilsvarende med den til dokumnetet hørende xsd og xsl. Når jeg uploader det via WS_FTP LE kan jeg vælge at sende som ASCII eller som binary. Hvilken rolle spiller det i denne forbindelse?

Det der undrer mig er at det faktisk ikke ser ud til at spille nogen som helst rolle, for dokumentet bliver rigtigt også når det sendes som ASCII - men det burde det vel ikke, for ASCII indeholder jo ikke disse tegn - eller hvad har jeg misforstået?
Avatar billede mik789 Nybegynder
27. december 2005 - 09:31 #1
Det viser sig også at W3C's validator under alle omstændigheder opfatter dokumentet som us-ascii. Fordi:

The HTTP Content-Type header (text/xml) sent by your web server (Apache/1.3.29 (Unix) mod_perl/1.27 FrontPage/5.0.2.2623 PHP/4.3.11 PHP-CGI/0.1b) did not contain a "charset" parameter, but the Content-Type was one of the XML text/* sub-types.

The relevant specification (RFC 3023) specifies a strong default of "us-ascii" for such documents so we will use this value regardless of any encoding you may have indicated elsewhere.

If you would like to use a different encoding, you should arrange to have your server send this new encoding information.

Men jeg har jo angivet:

<?xml version="1.0" encoding="UTF-8"?>

Hvorfor er dette ikke tilstrækkeligt?
Avatar billede arne_v Ekspert
27. december 2005 - 14:19 #2
for FTP er forskellen på ASCII og BINARY primært håndteringen af linieskift

din XML fil skal sendes som ASCII uanset om den er i karaktersæt US-ASCII, UTF-8
eller ISO-8859-1 fordi det er en tekst fil med linier

----

de er lidt vanskelige - tilsyneladende insisterer de på at få angiver charset
i en HTTP header - hvis det er dig egen web server så er det vel ikke noget
problem - web hotel kan være et problem
Avatar billede mik789 Nybegynder
28. december 2005 - 09:30 #3
det er netop et web hotel.
Og hvad er det så der er forskellen mellem ascii og binary ved linjeskift? Jeg har forstået at ved asscii (i Microsoft Notepad i alle fald) indsættes både en newline (\n) og en carriage-return (\r). Hvad gør ftp programmet i forhold til disse tegn, når filen sendes binary?
Avatar billede arne_v Ekspert
28. december 2005 - 11:44 #4
hvis du laver en fil i notepad med \r\n linieskift og FTP'er den til
en Unix maskine som ASCII så vil du få en tekst fil med samme logiske indhold
men lidt færre bytes fordi linieskift kun er \n

hvis du FTP'er som BINARY så vil du få præcis samme antal bytes, men
hvis du kigger på filen i en editor så vil du have en \r sidst i alle
linierne (fordi kun \n opfattes som linieskift)

derfor er ASCII godt til tektfiler og BINARY absolut krævet til binære
filer som ikke er linie orienteret
Avatar billede mik789 Nybegynder
29. december 2005 - 09:05 #5
ok, det forstår jeg. Man spørger sig så, hvorfor Notepad i det hele taget indsætter en \r. Hvad skal det til for, når det alligevel kun er \n der laver et linjeskift?
Avatar billede mik789 Nybegynder
29. december 2005 - 09:31 #6
og i øvrigt: hvad er rækkefølgen, når Notepad indsætter disse tegn: \r\n eller \n\r ? [Det første går jeg ud fra - korrekt?]
Avatar billede mik789 Nybegynder
29. december 2005 - 09:48 #7
Som jeg har forstået det er begge tegn en repræsentation af den gammeldags skrivemaskines taste-/håndtagsbevægelser. Og jeg gætter på at \r repræsenterer tryk på Returtasten (der på skrivemaskinen også automatisk udløser en linefeed - altså at valsen drejes nogle hak), og at \n repræsenterer det at bevæge linefeed-håndtaget (der kun drejer valsen men uden at føre skrivepunktet retur til starten af linjen). Hvis det er sådan, forstår man også hvorfor det sådan set er korrekt at have både \n og \r. Hvis man kun har \n, svarer det til at den ny linje bare starter der (horisontalt) hvor den forrige linje sluttede. Så logisk må rækkefølgen være det jeg lige før IKKE gættede på, nemlig: \n\r - altså først linefeed og så retur til starten af linjen - hvilket passer med at \n har lavere talværdi (10) end \r (13).

Jeg tænker bare højt her. Er det sådan det hænger sammen?
Avatar billede arne_v Ekspert
29. december 2005 - 12:10 #8
linieskift på windows er \r\n

linieskift på unix er \n

linieskift på Mac er (eller var ??) \r

den korrekte rækkefølge er \r\n

ja det er vist forklaringen på hvorfor Windows (og de fleste net protokoller)
bruger \r\n
Avatar billede mik789 Nybegynder
29. december 2005 - 21:40 #9
OK arne_v, så tror jeg jeg har fået svar på alle mine spørgsmål. Tak for tålmodigheden ;-)
lægger du et svar?
Avatar billede arne_v Ekspert
29. december 2005 - 22:22 #10
ok
Avatar billede olebole Juniormester
16. januar 2006 - 18:47 #11
<ole>

mik789 >> din skrivemaskine analogi er faktisk helt fin ... du uddrog bare den forkerte konklusion  :)

På en gammeldags skrivemaskine, tager man fat i returhåndtaget og fører det mod venstre. Derved føres valsen tilbage, så der igen kan skrives fra venstre margin ('Return' eller '\r').
Når valsen er helt i bund i venstre side, føres håndtaget en tak længere mod venstre, hvilket medfører, at valsen ruller - svarende til et linjeskift ('\n').

- derfor rækkefølgen '\r\n'  ;o)

/mvh
</bole>
Avatar billede mik789 Nybegynder
16. januar 2006 - 19:11 #12
ole> yes, OK, jeg forstår det. Der ER visse fordele ved ikke at være ung (selv om alle påstår noget andet) - bl.a. at man stadig kan huske hvordan en skrivemaskine fungerer. ;-)
Avatar billede olebole Juniormester
16. januar 2006 - 19:17 #13
http://www.kulturvaerdier.dk/dk/registre/antikviteter/skrivekugle.htm

- ak, skønne ungdom ..... hvor blev du dog af?  *LooL*
Avatar billede mik789 Nybegynder
16. januar 2006 - 19:23 #14
ah, hmmn, måske vi lige kom lidt for langt med tidsmaskinen her... SÅ gammel er jeg dog ikke endnu.
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