Avatar billede stigc Nybegynder
18. april 2005 - 10:06 Der er 16 kommentarer og
2 løsninger

Encoding ISO-8859-1 og byte 157

Jeg har konverteret en masse data til en simpel filstruktur som skal overholde ISO-8859-1. Problemet er at tegnet med værdien 157 slipper igennem som et gyldigt tegn.

String v = "Dønmez";
String fn = @"C:\test.txt";
System.IO.FileStream fs;
fs = new System.IO.FileStream(fn, System.IO.FileMode.Create);
byte[] b = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(v);
MessageBox.Show("test: " + b[2]);
fs.Write(b ,0, b.Length);
fs.Close();

Hvis jeg indsætter denne tekst i et XML-dokument (for at validere encoding'en) så viser Explorer indholdet som valid XML, i mens XML spy brokker sig over tegnet!

<?xml version="1.0" encoding="ISO-8859-1"?>
<items>
<item>Dønmez</item>
</items>

Hvordan kan Explorer og .NET acceptere '' med værdien 157?
Avatar billede arne_v Ekspert
18. april 2005 - 10:31 #1
Der er noget galt.

Lille ø i ISO-8859-1 er ikke 157 men 248 !

Og b[2] er jo også 'n' som er almindelig US ASCII.
Avatar billede stigc Nybegynder
18. april 2005 - 10:35 #2
Jeg tænkte nok det ville give problemer i browseren. Jeg bruger Explorer og ser en tekst på 7 bogstaver, og en firkant på den tredje plads. Din browser fjerner sandsynligvis tegnet fordi eksperten.dk kører iso-8859-1. Kan du prøve med en MS Explorer?
Avatar billede arne_v Ekspert
18. april 2005 - 10:49 #3
OK - med internet explorer kan jeg se en firkant i position 2.
Avatar billede arne_v Ekspert
18. april 2005 - 10:52 #4
Hm.

Internet Explorer har ikke ry for at være speciel kritisk og måske
processer den ISO-8859-1 ligesom CP-1252 (og jeg mener at den sidste har
symboler i 128-159).

.NET er ligeglad. En char er 16 bit og du kan stoppe hvad som helst ind
i en String.

Om ikke andet så med:

"\u009D"

(som jeg iøvrigt vil sige er den anbefaledede måde for "suspekte" tegn)
Avatar billede stigc Nybegynder
18. april 2005 - 11:03 #5
Jeg beder jo netop .NET om at encode med ISO-8859-1

byte[] b = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(v);

og så burde den fjerne tegn som ikke kan konverteres. Prøver jeg med

byte[] b = System.Text.Encoding.GetEncoding("ASCII").GetBytes(v);

udskifter den fx 'ø' med et '?'.

Er vi ude i at MS har deres egen definition af ISO-8859-1?
Avatar billede arne_v Ekspert
18. april 2005 - 11:11 #6
Snarere at:
  alle tegn 0-255 er valide i ISO-8859-1
  men 0-31 og 128-159 ikke har en grafisk repræsentation
altså at der er forskel på valid og kan vises
Avatar billede stigc Nybegynder
18. april 2005 - 11:12 #7
XML Spy mener heller ikke at 1252 burde indeholde byte 157!

<?xml version="1.0" encoding="windows-1252"?>
<items>
<item>Dønmez</item>
</items>
Avatar billede stigc Nybegynder
18. april 2005 - 11:14 #8
Men hvorfor fortæller XML spy at tegnet er invalid? Jeg har rimlig meget tiltro til det produkt.
Avatar billede arne_v Ekspert
18. april 2005 - 11:20 #9
Den har også ret i at 157 ikke er grafisk. Der er et hul ved 157 mellem
156=o e ligatur og 158=z caron (kilde: http://www.kostis.net/charsets/cp1252.htm)
Avatar billede arne_v Ekspert
18. april 2005 - 11:26 #10
XmlSpy vil tilsyneladende kun acceptere grafiske tegn.

http://www.w3.org/TR/2004/REC-xml-20040204/#charsets

Consequently, XML processors MUST accept any character in the range specified for Char. ]
Character Range
[2]      Char      ::=      #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]    /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */

It is a fatal error when an XML processor encounters an entity with an encoding that it is unable to process. It is a fatal error if an XML entity is determined (via default, encoding declaration, or higher-level protocol) to be in a certain encoding but contains byte sequences that are not legal in that encoding.

????
Avatar billede stigc Nybegynder
18. april 2005 - 11:32 #11
Men er 157 overhoved med i 8859-1? Hvis den ikke er det, så er det vel en fejl at MS accepterer den?

http://ubista.ubi.pt/~dfis-wg/sgml/html/32html/wilbur/charset.html
Avatar billede arne_v Ekspert
18. april 2005 - 12:03 #12
157 har ikke nogen betydning i ISO-8859-1 men traditionelt har man betragtet
alle bytes 0-255 for valide.
Avatar billede stigc Nybegynder
19. april 2005 - 13:48 #13
Når det nu er en ISO standard, så skulle man da tror, at der eksisterer klare regler. Hvem kan finde dem?
Avatar billede mmbn Nybegynder
10. maj 2005 - 10:28 #14
kilde: http://www.usenet.dk/ord/lokal.html
ISO-8859-1 er de facto-standarden på den danske del af usenet. Det er uden nogen tvivl den mest udbredte måde at repræsentere tegn på i disse grupper.

Et tegnsæt er egentlig en forkert betegnelse. Den rigtige er på engelsk Character Encoding, hvilket på dansk bliver til tegn-kodning. Ordet "tegnsæt" er dog så udbredt at vi anvender det her.

Når man skal udveksle beskeder elektronisk, må man blive enige om hvordan man gør det først: Hvad betyder det, når der kommer 7 ettaller efterfulgt af en 0? ISO-8859-1 er en standard for tekst, der kortlægger de forskellige kombinationer af nuller og ettaller.
ISO-8859-1 anvender 8 bit til repræsentation af hvert tegn. Da en bit enten kan være 0 eller 1, giver dette 256 (2 i 8. potens) forskellige muligheder. 8 bit kaldes en byte eller en oktet og kan repræsenteres af et tal mellem 0-255. ISO-8859-1 er altså en tabel over hvilke tal, der svarer til hvilke tegn: Eksempelvis giver et opslag i tabellen at tallet 65 svarer til tegnet "A".

ISO-8859-1 kendes også som dansk standard DS-ISO-8859-1, Latin Alphabet No. 1, Latin-1 eller Western (sidstnævnte er Netscapes betegnelse).


I de senere år er UTF-8 blevet udbredt.  Denne tillader brug af alle Unicodetegn i indlægget.
Avatar billede stigc Nybegynder
29. august 2005 - 22:44 #15
Nogen der ønsker points?
Avatar billede arne_v Ekspert
29. august 2005 - 22:46 #16
hvis du synes at jeg har fortjent nogen
Avatar billede stigc Nybegynder
29. august 2005 - 22:50 #17
ja, se det kan jeg ikke rigtig finde ud af :) Jeg blev jo ikke rigtig meget klogere. Men lidt klogere er jo bedre end ingen ting.
Avatar billede stigc Nybegynder
29. august 2005 - 22:51 #18
split.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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