我希望使用以下代码将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字符。
我因为英文写作不好而向你道歉:)
答案 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
}