Вставьте данные 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
}