[mssql] Entities en OPENXML clause

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Ik heb een OPENXML clause gemaakt. Werkt prima, maar in de XML die ik ermee parse, staan speciale karakters en dan met name euro-tekens. De back-end software codeert deze als "&#x80 ;" (zonder spatie, anders laat GoT het gewoon door).

Maar: het gaat mis :)
De XML wordt netjes geparset, maar het euroteken wordt teruggegeven als een ?. De ASCII-waarde ervan is 63. Als ik em voer aan een nvarchar, dan is de ASCII-waarde nog steeds 63, maar de UNICODE-waarde is 128. En dan nóg geeft ie in de resultset geen euro-teken, maar in het laatste geval een vierkantje.

De XML aan sp_xml_preparedocument voeren als een unicode-string en/of een andere encoding gebruiken, heeft totaal geen effect. Ook de enitity "&euro ;" snapt ie niet :?

De code:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
DECLARE @hDoc int
EXEC sp_xml_preparedocument @hDoc OUTPUT, '<?xml version="1.0"?>
<test>
    <char>&#x80;</char>
</test>
'
SELECT ASCII([Char]), UNICODE([Char]), [Char]
FROM OPENXML(@hDoc, '/test') WITH (
   [Char] nvarchar(12) 'char'
)

EXEC sp_xml_removedocument @hDoc

[ Voor 8% gewijzigd door _Thanatos_ op 26-03-2003 16:51 . Reden: layout ]

日本!🎌


  • EfBe
  • Registratie: Januari 2000
  • Niet online
hoe geef je hem weer? Want die '?' krijg je bv ook als een euroteken print in een console programmaatje, de fonts kennen dat euroteken niet. Gebruik je lucida console als font in je programma waar je de char toont?

Overigens is het imho niet zo handig om xml te gaan parsen in T-SQL.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
De query analyser geeft em weer. met de functie ASCII en UNICODE bekijk ik dan de decimale waarden van het karakter en ook die kloppen niet. (UNICODE waarde hoort ergens in de 8800 ofzo te liggen, maar geeft 128; ASCII waarde hoort 128 te zijn, maar is 63)

Overigens, als ik het euro-teken direct in de XML zet en het invoer als een national string (dus een N voor de xml-string), dan geeft ie keurig het euro-teken in de resultset. Ook de ASCII en UNICODE-waarden kloppen dan.

Wat betreft je laatste opmerking: :? :?
Daar is SQLXML juist voor bedoeld, lieverd, om XML te parsen O-)

日本!🎌