我正在尝试读取一个XML文件,其中包含一些立陶宛字符。当我试着读它时,它显示了一些?而不是。我使用sqlbulcopy将xml文件导入数据库。
如何在编码utf-8中读取XML文件?
代码在中的应用
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);
}
}
}发布于 2016-04-21 14:19:53
文件是Unicode -�是Unicode替换字符。如果文件是ANSI,则不会出现这种情况。
当使用错误的编码将ANSI源转换为Unicode时,此字符将替换与编码不匹配的任何输入字符。
例如,指定拉丁文(Windows-1252) (如使用File.ReadAllText(somePath, .Encoding.GetEncoding("Windows-1252")) ),并尝试阅读希腊文(1253),将用�替换一些希腊字符。
这意味着在创建文件时出现了问题。这可能是由各种原因造成的,所有这些原因都与在某个时候使用错误的代码页将数据作为ANSI处理有关:
varchar字段替换为nvarchar字段。一种可能的解决方法是通过添加Auto Translate=False设置来防止从数据库加载时的字符转换。本质上,这使用应用程序的CultureInfo,而不是字段的排序规则来读取和转换ANSI数据。
https://stackoverflow.com/questions/36765474
复制相似问题