Вставьте данные Unicode из строки xml в Datatable

Я хочу сохранить данные Unicode в базу данных из строки xml с помощью этого кода:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlText);

using (XmlNodeReader xmlReader = new XmlNodeReader(xmlDoc))
{
        DataTable dt = new DataTable();
        dt.TableName = "sms";
        dt.Columns.Add("rowID");
        dt.Columns.Add("origAddr");
        dt.Columns.Add("time");
        dt.Columns.Add("message");
        dt.ReadXml(xmlReader);
        return dt;
}

но когда я сохраняю datatable в базу данных, мой символ Юникода появляется с вопросительным знаком (???????)

Корректировка моей базы данных верна, а другой символ Юникода сохранен правильно.

Я извиняюсь перед вами из-за плохой английской письменности:)

Ответ 1

Я начну все с образованной догадки.

В вашей базе данных или в вашей таблице используется набор символов, который не является полным Unicode. Символы, которые хранятся в виде вопросительных знаков, являются символами, которые находятся за пределами набора символов базы данных или таблицы. Символы, которые правильно сохраняются, находятся внутри набора символов базы данных или таблицы.

Кроме того, у вас есть объекты XMLDocument() или DataTable(), которые преобразуют символы, которые они читают, в набор символов, который меньше полного Юникода.

Дайте дополнительную информацию, запрошенную комментариями, и я посмотрю, смогу ли я улучшить этот ответ.

Ответ 2

Обычно это происходит, когда исходный текст не сохраняется как Unicode. Например, если вы читаете ваши XML-данные из текстового файла, а текстовый файл хранится как Ansi (используя кодовую страницу) или хранится в виде файла Unicode без спецификации (отметки байтового заказа или подписи), когда вы читаете текст файл, не-ASCII-символы могут быть неправильно прочитаны. Чтобы решить эту проблему, откройте исходный XML файл в текстовом редакторе (например Notepad ++) и измените свою кодировку на Unicode или UTF-8, а затем сохранить файл.
Вы также можете открыть файл в "Блокноте" и сохранить файл как Unicode (File/Save As → Encoding: Unicode или UTF-8). Убедитесь, что при открытии файла в блокноте символы отображаются правильно.

Ответ 3

используйте XmlTextReader для чтения xml и проверьте, сохраняется ли ошибка

XmlTextReader stream = new XmlTextReader(_pathXml);
     while (stream.Read())
     {
         //TODO save each element
     }