sql >> Databasteknik >  >> RDS >> Sqlserver

Hexadecimalt värde 0x00 är ett ogiltigt tecken

Utan din faktiska data eller källa kommer det att vara svårt för oss att diagnostisera vad som går fel. Jag kan dock ge några förslag:

  • Unicode NUL (0x00) är olagligt i alla versioner av XML och validerande tolkar måste avvisa indata som innehåller det.
  • Trots ovanstående; ovaliderad XML i verkligheten kan innehålla vilken typ av skräp som är dåligt utformade byte man kan tänka sig.
  • XML 1.1 tillåter noll-bredd och icke-utskriftskontrolltecken (förutom NUL), så du kan inte titta på en XML 1.1-fil i en textredigerare och tala om vilka tecken den innehåller.

Med tanke på vad du skrev misstänker jag att det som konverterar databasdata till XML är trasigt; det sprider icke-XML-tecken.

Skapa några databasposter med icke-XML-tecken (NUL, DEL, kontrolltecken, et al.) och kör din XML-omvandlare på den. Mata ut XML till en fil och titta på den i en hex-redigerare. Om detta innehåller icke-XML-tecken är din omvandlare trasig. Fixa det eller, om du inte kan, skapa en förprocessor som avvisar utdata med sådana tecken.

Om omvandlarens utdata ser bra ut ligger problemet i din XML-konsument; det sätter in icke-XML-tecken någonstans. Du måste dela upp din konsumtionsprocess i separata steg, undersöka resultatet vid varje steg och begränsa vad som introducerar de dåliga karaktärerna.

Kontrollera filkodningen (för UTF-16)

Uppdatering:Jag stötte precis på ett exempel på detta själv! Vad som hände är att producenten kodade XML som UTF16 och konsumenten förväntade sig UTF8. Eftersom UTF16 använder 0x00 som den höga byten för alla ASCII-tecken och UTF8 inte gör det, såg konsumenten varannan byte som en NUL. I mitt fall kunde jag ändra kodning, men föreslog att alla XML-nyttolaster skulle börja med en BOM.



  1. Vad är det bästa sättet att implementera en delsträngsökning i SQL?

  2. Databasmodell för ett meddelandesystem

  3. Lås upp apex administratörskonto

  4. Använder WHERE-satsen för att hitta POI inom ett avstånd från Longitud och Latitude