[ASP]Vreemde Byte in de eend

Pagina: 1
Acties:

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Topicstarter
Naar een webapplicatie word door een Java app een binary post gedaan van een xml bericht, hier is niks aan te veranderen, deze word met BinaryRead uitgelezen in VBscript. Ipv een ë verschijnt nu een vierkantje; onder een hexloep blijken er 2 bytes in gebruik C2 89. Die 89 is de ë die ik zoek, maar wat is die C2 en hoe krijg ik die weg?

oogjes open, snaveltjes dicht


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Is de encoding die gebruikt wordt binnen het XML bericht en 't VBscript wel hetzelfde? Lijkt er niet op namelijk...

My personal website


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 20:41
Heb je niet te maken met een verschil in character encoding. Dus dat vbs standaard een andere encoding gebruikt vergeleken met de Java applicatie? Ik denk dat als je dezelfde encoding gaat toepassen in vbs, aangezien die Java appicatie niet kan wijzigen, je wel het gewenste resultaat krijgt.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Topicstarter
Als ik de data binnen krijg, sla ik het binair op, en dan is het karakter dus al zo gecodeerd. Ik kan allerlei encodings boven de xml gaan zetten, maar dan word het karakter nog steeds niet goed getoond. Volgens mij moet ik voordat het een xmldocument word zorgen dat de codering goed is.

oogjes open, snaveltjes dicht


  • JochemK
  • Registratie: Maart 2003
  • Laatst online: 06-05 13:43
Volgens mij moet je gebruik maken van UTF8 encoding / decoding. Ik weet dat het in php zo werkt, en neem daarom aan dat het in Java ook wel zo zal gaan.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Topicstarter
Het xml bericht/bestand is idd utf-8, maar dan is het al te laat zeg maar. Door het met andere condering op te slaan verandert het karakter niet.

oogjes open, snaveltjes dicht


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Als je het karakter inleest om deze vervolgens naar de juiste te zetten, wat gebeurt er dan?
Meer info.....

My personal website


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Topicstarter
Ik sla de stream op, ik weet in principe niet wanneer er een vreemd karakter voorkomt. Ik heb de codepage en charset van het ontvangende script ook al naar utf-8 gezet, maar het blijft 'vierkantjes' tonen/opslaan.

oogjes open, snaveltjes dicht


  • azuidhof
  • Registratie: April 2005
  • Laatst online: 26-02 19:20
@TS: ik denk dat je probleem opgelost kan worden door de encoding van je webapp te veranderen van UTF-8 naar ISO-8859-1. Heb hier zelf onlangs ook nog behoorlijk mee lopen stoeien, uiteindelijk bleek dit het probleem op te lossen (tenminste een van mijn problemen, want als je hier eenmaal serieus mee aan de slag wilt komt er steeds een nieuw probleem opduiken 8)7. Zie ook http://arjansworld.blogsp...4/debugging-xml-code.html).

Mijn .NET blog!


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Als je een binary read doet, dan heb je geen ë. Dat is een karakter, geen byte. De ë komt inderdaad doordat je met een encoding de transformatie byte-sequence->karakter-sequence doet. Je opmerking
Als ik de data binnen krijg, sla ik het binair op, en dan is het karakter dus al zo gecodeerd.
is dus onzinnig. Je hebt nog geen karakter

De correcte oplossing is inderdaad je XML header binair parsen, daar de encoding uit halen. Dat is mogelijk zonder dat je de encoding weet, omdat de header alleen maar de ASCII-subset gebruik, en geen NUL karakter bevat. Elke 0 byte is dus een onderdeel van een groter karakter.

Als je die encoding hebt, dan kun je vervolgens daarmee het hele bericht vertalen van bytes naar (Unicode) karakters.

Je weet blijkbaar al dat het UTF-8 is. In dat geval is het vrij duidelijk: UTF-8 heeft geen 1-byte karakters >= 80h. 89h is dus geen UTF-8 karakter, en dus ook geen ë. Ik weet niet waarom je eerste post dat suggereert. C2,89 is een valide UTF-8 karakter. Het formaat is 110yyyyy 10xxxxxx, unicode waarde is dan yyyyyxxxxxx, in dit geval is yyyyy=00010, xxxxxx=001001 dus het is karakter 00000000 10001001 ==U+0089 en dat is wel ë

Table 3-6. Well-Formed UTF-8 Byte Sequences
Code Points1st Byte2nd Byte3rd Byte4th Byte
U+0000..U+007F00..7F
U+0080..U+07FFC2..DF 80..BF
U+0800..U+0FFFE0A0..BF 80..BF
U+1000..U+CFFFE1..EC80..BF80..BF
U+D000..U+D7FFED80..9F80..BF
U+E000..U+FFFFEE..EF80..BF80..BF
U+10000..U+3FFFFF090..BF80..BF80..BF
U+40000..U+FFFFFF1..F380..BF80..BF80..BF
U+100000..U+10FFFFF480..8F80..BF80..BF

[ Voor 35% gewijzigd door MSalters op 05-04-2005 14:11 . Reden: tabelletje ]

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Topicstarter
Ik snap er dus geen reet van, de binaire string, de byte array is dus in UTF-8 als ik em krijg gepost. De codering vermeld in het xml bericht is UTF-8. Als ik dit bestand opslaat zou de cedring dan toch goed moeten wezen? Kennelijk niet, ik snap nu niet wanneer ik wat moet doen? Ik leid geloof ik ook een beetje aan project-moeheid, ik zie/snap het allemaal niet meer :/

oogjes open, snaveltjes dicht


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Hoe sla je het bestand op? Als je gewoon de bytes opslaat (nog steeds allemaal binair) dan krijg je gewoon een UTF-8 bestand op disk. Dat is wat ongewoon, en een domme viewer die dat niet snapt zal dan gekke tekens laten zien, maar IE's xml viewer bijvoorbeeld struikelt daar niet over.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Topicstarter
Ik gebruik een ado stream om het binair bestand op te slaan, maar IE lust het ook niet, nog steeds niet de goede karakters.

oogjes open, snaveltjes dicht


  • vinnux
  • Registratie: Maart 2001
  • Niet online
Zoals reeds gezegd onstaat dat vierkantje doordat de charset die je gebruikt om te displayen niet gelijk is aan de originele charset toen het xml bericht gemaakt werd.
Je moet nagaan wat de charset was toen je het xml bericht maakte, via welke charset hij geconverteerd is naar binaire vorm en via welke charset hij terugvertaald is naar tekstvorm.

Deze fout komt helaas in heel veel systemen voor.

Java zal wel een xml in Unicode aanleveren en je zal het wel displayen in UTF-8, hierdoor veranderen vreemde tekens in vierkantjes. Download TextPad bijvoorbeeld eens en speel es met de charsets ...

[ Voor 8% gewijzigd door vinnux op 05-04-2005 14:51 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Don Facundo schreef op dinsdag 05 april 2005 @ 14:39:
Ik gebruik een ado stream om het binair bestand op te slaan, maar IE lust het ook niet, nog steeds niet de goede karakters.
ADO streams zijn uit m'n hoofd karakterstreams, terwijl we net hadden vastgesteld dat je geen karakters hebt.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
vgouw schreef op dinsdag 05 april 2005 @ 14:50:
Java zal wel een xml in Unicode aanleveren en je zal het wel displayen in UTF-8, hierdoor veranderen vreemde tekens in vierkantjes. Download TextPad bijvoorbeeld eens en speel es met de charsets ...
Helaas, klok en klepel. Unicode is geen encoding, maar een code point assignment. Daarin staat bijvoorbeeld dat het karakter U+00000089 een ë is. De volgende vraag is hoe je U+00000089 overstuurt. De simpele methode is 4 bytes, namelijk 0x00000089. Dat is wel bekend als UTF-32 encoding. Voor tekst die voornamelijk ASCII is, is het effectiever om een UTF-8 encoding te gebruiken, en die is terug te vinden in de tabel die ik eerder postte.

En voor alle duidelijkheid: in Unicode zijn er geen vrijwel geen "vreemde tekens" meer.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Java is intern UTF-16 maar misschien dat het afhankelijk is van de standaard encoding van het systeem waarmee het binair wordt weggeschreven. :o

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Topicstarter
MSalters schreef op dinsdag 05 april 2005 @ 15:44:
[...]

ADO streams zijn uit m'n hoofd karakterstreams, terwijl we net hadden vastgesteld dat je geen karakters hebt.
Is het uberhaupt wel te doen dan in VBScript vraag ik me af... Volgens mij krijg ik van de Response.BinaryRead een SafeArray terug, en moet ik een recht toe recht aan ByteArray hebben om deze te converteren?

Pffffff :|

oogjes open, snaveltjes dicht


  • foske
  • Registratie: Juli 2001
  • Laatst online: 20:56
Ik had een soortgelijk probleem, ik heb het toen eenvoudig opgelost door de HTML code neer te zetten aan de kant waar de XML feed wordt gegeven. (In jouw geval dus bij de JAVA app, of eventueel in de database). Bijvoorbeeld: &euml ; voor ë

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Don Facundo schreef op dinsdag 05 april 2005 @ 16:39:
[...]
Is het uberhaupt wel te doen dan in VBScript vraag ik me af... Volgens mij krijg ik van de Response.BinaryRead een SafeArray terug, en moet ik een recht toe recht aan ByteArray hebben om deze te converteren?
Altijd mogelijk, soms moeilijk. De worst-case is dat je zelf de tabel implementeert die ik daarboven heb aangehaald.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Topicstarter
Nou in ieder geval bedankt voor de info, gaan maar eens kijken wat er hier mee doen, moet me al in 10.000 duizend bochten wringen om deze koppeling te realiseren... derde partijen zijn nooit leuk!

oogjes open, snaveltjes dicht

Pagina: 1