从XML字符串向DataTable插入Unicode数据

11

我想使用以下代码从 XML 字符串将 Unicode 数据保存到数据库:

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字符也被正确存储。


5
请附上你编写的将数据保存到数据库的代码。 - Maheep
你使用的是哪种数据库?MySQL、SQL Server、MS Access?版本是多少?此外,请展示一下这段代码生成的表定义。我特别关注表和数据库的字符集。 - Jim DeLaHunt
除了之前的评论外,也试着使用其他字体来检查数据库内容。可能实际上数据已经正确存储,但是用于呈现数据的字体并不包括一些字符,而且您正在使用的任何软件都会退回到 ? 占位符。虽然这不是最有可能的解释,但很容易检查,值得一试;) - Edurne Pascual
3个回答

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

1

我会从一个有根据的猜测开始。

你的数据库或表使用的字符集不是完整的Unicode。被存储为问号的字符是超出了数据库或表字符集范围的字符。被正确存储的字符恰好在数据库或表字符集内。

或者,你的XMLDocument()DataTable()对象将它们读取的字符转换成了不完整的Unicode字符集。

提供评论中请求的额外信息,我会尽力改进这个答案。


0
使用XmlTextReader读取XML并验证是否存在错误。
XmlTextReader stream = new XmlTextReader(_pathXml);
     while (stream.Read())
     {
         //TODO save each element
     }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接