sql >> Databáze >  >> RDS >> Sqlserver

Hexadecimální hodnota 0x00 je neplatný znak

Bez vašich skutečných dat nebo zdroje pro nás bude těžké diagnostikovat, co je špatně. Mohu však učinit několik návrhů:

  • Unicode NUL (0x00) je nezákonné ve všech verzích XML a ověřující analyzátory musí odmítnout vstup, který jej obsahuje.
  • Navzdory výše uvedenému; neověřené XML v reálném světě může obsahovat jakýkoli druh odpadu, který si lze představit ve špatném tvaru.
  • XML 1.1 umožňuje nulovou šířku a netisknutelné řídicí znaky (kromě NUL), takže se nemůžete podívat na soubor XML 1.1 v textovém editoru a zjistit, jaké znaky obsahuje.

Vzhledem k tomu, co jste napsal, mám podezření, že cokoliv převádí data databáze do XML, je nefunkční; šíří jiné než XML znaky.

Vytvořte některé položky databáze s neXML znaky (NUL, DEL, řídicí znaky atd.) a spusťte na nich svůj XML konvertor. Výstup XML do souboru a podívat se na něj v hex editoru. Pokud toto obsahuje jiné než XML znaky, váš převaděč je nefunkční. Opravte to, nebo pokud nemůžete, vytvořte preprocesor, který odmítne výstup s takovými znaky.

Pokud výstup převodníku vypadá dobře, problém je ve vašem spotřebiteli XML; někde se vkládají jiné než XML znaky. Budete muset rozdělit proces spotřeby do samostatných kroků, prozkoumat výstup v každém kroku a zúžit to, co představuje špatné postavy.

Zkontrolujte kódování souboru (pro UTF-16)

Aktualizace:Právě jsem narazil na takový příklad! Došlo k tomu, že výrobce kódoval XML jako UTF16 a spotřebitel očekával UTF8. Protože UTF16 používá 0x00 jako horní bajt pro všechny znaky ASCII a UTF8 nikoli, spotřebitel viděl každý druhý bajt jako NUL. V mém případě bych mohl změnit kódování, ale navrhl jsem, aby všechny datové části XML začínaly kusovníkem.



  1. Jak zobrazit rozevírací seznam s předem vybranou možností

  2. Korelovaný poddotaz MySQL v syntaxi JOIN

  3. Jak vrátit pole při použití GROUP BY

  4. Jak napsat vytvoření uživatele? s připraveným příkazem MySQL