Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Шестнадесетичната стойност 0x00 е невалиден знак

Без вашите действителни данни или източник ще ни бъде трудно да диагностицираме какво не е наред. Мога обаче да направя няколко предложения:

  • Unicode NUL (0x00) е незаконен във всички версии на XML и проверяващите парсери трябва да отхвърлят вход, който го съдържа.
  • Въпреки горното; реалният невалидиран XML може да съдържа всякакъв вид боклук, неправилно оформени байтове, които можете да си представите.
  • XML 1.1 позволява контролни знаци с нулева ширина и неотпечатани (с изключение на NUL), така че не можете да разгледате XML 1.1 файл в текстов редактор и да разберете какви знаци съдържа.

Предвид това, което написахте, подозирам, че каквото и да преобразува данните от базата данни в XML, е счупено; той разпространява не-XML знаци.

Създайте някои записи в базата данни с не-XML знаци (NUL, DEL, контролни знаци и др.) и стартирайте своя XML конвертор върху тях. Изведете XML във файл и го разгледайте в шестнадесетичен редактор. Ако това съдържа не-XML знаци, вашият конвертор е повреден. Поправете го или, ако не можете, създайте препроцесор, който отхвърля изход с такива знаци.

Ако изходът на конвертора изглежда добре, проблемът е във вашия XML потребител; вмъква някъде знаци, които не са XML. Ще трябва да разделите процеса на потребление на отделни стъпки, да изследвате изхода на всяка стъпка и да стесните какво въвежда лошите знаци.

Проверете кодирането на файла (за UTF-16)

Актуализация:Току-що се натъкнах на пример за това! Това, което се случваше, е, че производителят кодира XML като UTF16, а потребителят очакваше UTF8. Тъй като UTF16 използва 0x00 като старши байт за всички ASCII символи, а UTF8 не, потребителят виждаше всеки втори байт като NUL. В моя случай можех да променя кодирането, но предложих всички XML полезни данни да започват с BOM.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталация стъпка по стъпка на SQL Server 2017 -2

  2. SQL Server изпълнява резервно копие с C#

  3. Добавете стойност по подразбиране на полето за дата и час в SQL Server към времева марка

  4. Изтрийте пощенските съобщения от базата данни от базата данни msdb в SQL Server (T-SQL)

  5. pyodbc не може да се свърже с базата данни