#xml #ms-access #vba
#xml #ms-access #vba
Вопрос:
Я сгенерировал XML-документ в виде текстового файла, в котором указано, что он должен быть закодирован как UTF-8
. Когда я проверяю соответствие схеме, он сообщает, что в файле есть недопустимый символ.
An invalid character was found in text content.
Подозрительный символ имеет значение в один байт 0x92
.
В Visual Basic я использую переменную dom
типа DOMDocument60
; и выполните следующие действия
Set nod = dom.createElement("dc.description")
nod.text = Trim$(Nz(rs!mDescription, ""))
Это источник ошибки. У меня такое чувство, что мне нужно выполнить преобразование набора символов, чтобы правильно закодировать подозрительный символ в utf-8.
Конкретные вопросы, которые у меня есть:
1) Какой набор символов является моей отправной точкой? Строка поступает из базы данных access-2010 (тип Memo)
2) Как мне преобразовать ее в UTF-8
?
Я в недоумении, как это сделать. Я не очень хорошо знаком с VBA.
Ответ №1:
Символ, вызывающий у вас огорчение, известен как умная кавычка или фигурная кавычка. Это выглядит так: ’
Эта проблема на самом деле не связана с доступом, кроме того факта, что вам нужно найти способ в Access / VBA справиться с этим. По какой-либо причине ваш XML содержит недопустимые символы XML.
Я могу придумать два варианта. Первый вариант — заменить символ стандартной неинтеллектуальной кавычкой. Вот несколько неэлегантных кодов для быстрой замены всех четырех возможных интеллектуальных кавычек одновременно:
Replace(Replace(Replace(Replace(MyString, Chr(147), Chr(34)), Chr(148), Chr(34)), Chr(145), Chr(39)), Chr(146), Chr(39))
Второй вариант — заменить символы-нарушители, предполагая, что они вам действительно нужны, соответствующим кодом символов XML / HTML, который для конкретного символа, с которым у вас возникли проблемы, является:
amp;#146;
Вы можете рассмотреть возможность выполнения замены для входящих данных, чтобы они сохранялись с допустимыми символами с самого начала.
Комментарии:
1. Спасибо HK1. Я использовал ваше второе предложение. У меня также было несколько других символов, не входящих
UTF-8
в состав, и я преобразовал их соответствующим образом. Спасибо, что посмотрели мимо того, что, как я думал, было проблемой. Очень полезно.