将xml字符串中的Unicode数据插入Datatable

时间:2012-02-06 05:12:20

标签: c# xml unicode

我希望使用以下代码将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;
}

但是当我将数据表保存到数据库中时,我的unicode字符会出现问号(???????)

我的数据库归类是正确的,并且正确存储了其他unicode字符。

我因为英文写作不好而向你道歉:)

3 个答案:

答案 0 :(得分:1)

我会用有根据的猜测开始。

您的数据库或表使用的字符集不是完整的Unicode。作为问号存储的字符是数据库或表字符集之外的字符。正确存储的字符恰好位于数据库或表字符集中。

或者,您的XMLDocument()DataTable()个对象正在将读取的字符转换为小于完整Unicode的字符集。

提供评论所要求的额外信息,我会看看我是否可以改进这个答案。

答案 1 :(得分:0)

通常,当源文本未存储为Unicode时会发生这种情况。例如,如果您从文本文件中读取xml数据,并且文本文件存储为Ansi(使用代码页),或者它存储为没有BOM(字节顺序标记或签名)的Unicode文件,则在阅读文本时文件,非ASCII字符可能无法正确读取 要解决此问题,请在文本编辑器中打开源xml文件(例如Notepad++)并将编码更改为Unicode或UTF-8,然后保存文件。
您也可以在记事本中打开该文件,并将文件另存为Unicode(文件/另存为 - >编码:Unicode或UTF-8)。确保在记事本中打开文件时,字符显示正确。

答案 2 :(得分:0)

使用XmlTextReader读取xml并验证错误是否仍然存在

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