XML - данные на корневом уровне недействительны - PullRequest
38 голосов
/ 15 ноября 2008

У меня есть XSD-файл, который закодирован в UTF-8, и любой текстовый редактор, через который я его запускаю, не показывает никаких символов в начале файла, но когда я поднимаю его в отладчике Visual Studio, я четко увидеть пустое поле перед файлом.

Box in file

Я также получаю ошибку:

Данные на корневом уровне недействительны. Строка 1, позиция 1.

alt text

Кто-нибудь знает, что это?

Обновление: отредактировано сообщение для уточнения типа файла. Это XSD-файл, созданный создателем Microsoft XSD.

Ответы [ 2 ]

54 голосов
/ 15 ноября 2008

Оказывается, ответ таков, что я вижу Порядок следования байтов , который является символом, который сообщает всему, что загружает документ, в каком виде он закодирован. В моем случае это закодировано в utf-8, поэтому соответствующая спецификация была EF BB BF, как показано ниже. Чтобы удалить его, я открыл его в Notepad ++ и щелкнул «Кодировать в UTF-8 без BOM», как показано ниже:

Saving in NotePad++.

Чтобы на самом деле увидеть спецификацию, мне пришлось открыть ее в TextPad в двоичном режиме: и выполнить поиск Google для "EF BB BF" .

binary mode

Мне потребовалось около 8 часов, чтобы понять, что это было причиной, поэтому я решил поделиться этим со всеми.

Обновление : Если бы я прочитал сообщение в блоге Джоэла Спольски: Абсолютный минимум каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без оправданий!) , тогда у меня, возможно, не было этой проблемы.

29 голосов
/ 19 ноября 2008

вот как вы делаете это с vim:

# vim file.xml
:set nobomb
:wq
...