首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用UTF-8编码读取XML文件

用UTF-8编码读取XML文件
EN

Stack Overflow用户
提问于 2016-04-21 09:31:45
回答 1查看 3.1K关注 0票数 0

我正在尝试读取一个XML文件,其中包含一些立陶宛字符。当我试着读它时,它显示了一些?而不是。我使用sqlbulcopy将xml文件导入数据库。

如何在编码utf-8中读取XML文件?

代码在中的应用

代码语言:javascript
复制
 string CS = ConfigurationManager.ConnectionStrings["CS"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        {

            DataSet ds = new DataSet();

            ds.ReadXml(Server.MapPath("~/Data.xml"));

            DataTable dtHall = ds.Tables["Hall"];
            DataTable dtGroup = ds.Tables["HallGroup"];
            DataTable dtSeat = ds.Tables["HallSeat"];

            con.Open();

            using (SqlBulkCopy bc = new SqlBulkCopy(con))
            {
                bc.DestinationTableName = "Hall";
                bc.ColumnMappings.Add("HallID", "HallID");
                bc.ColumnMappings.Add("Name", "Name");
                bc.ColumnMappings.Add("TicketLimit", "TicketLimit");
                bc.WriteToServer(dtHall);
            }

            using (SqlBulkCopy bc = new SqlBulkCopy(con))
            {
                bc.DestinationTableName = "HallGroup";
                bc.ColumnMappings.Add("HallID", "HallID");
                bc.ColumnMappings.Add("HallGroupID", "HallGroupID");
                bc.ColumnMappings.Add("Name", "Name");
                bc.ColumnMappings.Add("AZ", "AZ");
                bc.WriteToServer(dtGroup);
            }

            using (SqlBulkCopy bc = new SqlBulkCopy(con))
            {
                bc.DestinationTableName = "HallSeat";
                bc.ColumnMappings.Add("HallGroupID", "HallGroupID");
                bc.ColumnMappings.Add("ShowSeatID", "ShowSeatID");
                bc.ColumnMappings.Add("Color", "Color");
                bc.ColumnMappings.Add("Price", "Price");
                bc.ColumnMappings.Add("SeatRow", "SeatRow");
                bc.ColumnMappings.Add("SeatNumber", "SeatNumber");
                bc.ColumnMappings.Add("IsReserved", "IsReserved");
                bc.WriteToServer(dtSeat);
            }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-21 14:19:53

文件是Unicode -�是Unicode替换字符。如果文件是ANSI,则不会出现这种情况。

当使用错误的编码将ANSI源转换为Unicode时,此字符将替换与编码不匹配的任何输入字符。

例如,指定拉丁文(Windows-1252) (如使用File.ReadAllText(somePath, .Encoding.GetEncoding("Windows-1252")) ),并尝试阅读希腊文(1253),将用�替换一些希腊字符。

这意味着在创建文件时出现了问题。这可能是由各种原因造成的,所有这些原因都与在某个时候使用错误的代码页将数据作为ANSI处理有关:

  • 可能源是一个与系统编码不同的单字节编码的文件,例如在系统区域设置为1252的机器上读取由1253生成的文件。解决方案要么使用正确的编码,要么确保文件首先以UTF8的形式生成。
  • 数据可能来自ANSI数据库字段(即varchar),其排序规则与内容不匹配。数据库驱动程序将尝试使用排序规则的代码页来翻译数据,从而导致错误。这实际上是一个数据库错误。真正的解决方案是将varchar字段替换为nvarchar字段。

一种可能的解决方法是通过添加Auto Translate=False设置来防止从数据库加载时的字符转换。本质上,这使用应用程序的CultureInfo,而不是字段的排序规则来读取和转换ANSI数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36765474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档