Преобразование строки из одной кодировки в другую

#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 в состав, и я преобразовал их соответствующим образом. Спасибо, что посмотрели мимо того, что, как я думал, было проблемой. Очень полезно.