【问题标题】:Insert Unicode data from xml string to Datatable将 Unicode 数据从 xml 字符串插入到 Datatable
【发布时间】:2012-02-27 16:11:45
【问题描述】:

我想使用以下代码将 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 字符存储正确。

【问题讨论】:

  • 请附上代码以将数据保存在您编写的数据库中。
  • 您使用的是什么类型的数据库? MySQL、SQL Server、MS Access?什么版本?此外,请向我们展示此代码产生的表定义。我对表和数据库的字符集特别感兴趣。
  • 除了之前的cmets,还可以尝试使用一些其他的字体来查看数据库的内容。数据实际上可能已正确存储,但它所呈现的字体不包含某些字符,并且您用于查看数据的任何软件都回退到 ? 占位符。不是最有可能的解释,但很容易检查是否值得;)

标签: c# xml unicode


【解决方案1】:

我将从有根据的猜测开始。

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-04-30
        • 1970-01-01
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 2012-10-17
        • 1970-01-01
        • 2011-12-09
        相关资源
        最近更新 更多