C# 4.0 读取带有Unicode字符的csv文件时引发异常
Csv文件可能具有多语言字符 下面是我在C# 4.0 读取带有Unicode字符的csv文件时引发异常,c#-4.0,csv,odbc,sqldatasource,dataview,C# 4.0,Csv,Odbc,Sqldatasource,Dataview,Csv文件可能具有多语言字符 下面是我在DataView List<BulkUser> _lstBulkUser = new List<BulkUser>(); DataView BlukUserView; try { using (SqlDataSource _SqlDataSource = new SqlDataSource())
DataView
List<BulkUser> _lstBulkUser = new List<BulkUser>();
DataView BlukUserView;
try
{
using (SqlDataSource _SqlDataSource = new SqlDataSource())
{
//_SqlDataSource.ConnectionString = "Dsn=outlook;dbq=D:\\selvam\\projectlist\\lates\\trunk\\SLVconsoleApp\\SLVconsoleApp.Web\\Uploads\\CSVFiles;defaultdir=D:\\selvam\\projectlist\\lates\\trunk\\SLVconsoleApp\\SLVconsoleApp.Web\\Uploads\\CSVFiles;driverid=27;fil=text;maxbuffersize=2048;pagetimeout=5";
_SqlDataSource.ConnectionString = "Dsn=" + ConfigurationManager.AppSettings["OutlookDns"].ToString() + ";dbq=" + ConfigurationManager.AppSettings["OutlookFileFolder"].ToString() + ";defaultdir=" + ConfigurationManager.AppSettings["OutlookFileFolder"].ToString() + ";driverid=27;fil=text;maxbuffersize=2048;pagetimeout=5";
_SqlDataSource.SelectCommand = "SELECT [First Name] As First_Name, [Last Name] AS LAST_NAME, Company, [E-mail Address] AS EMAILID FROM [" + Filename + "]";
_SqlDataSource.ProviderName = "System.Data.Odbc";
BlukUserView = (DataView)_SqlDataSource.Select(DataSourceSelectArguments.Empty);
int i = 1;
_lstBulkUser = (from value in BlukUserView.Table.Select() select new BulkUser { ID = Convert.ToString(i++), FirstName = Convert.ToString(Encoding.UTF8.GetString((byte[])value["First_Name"])), LastName = value["LAST_NAME"].ToString(), EmailId = value["EMAILID"].ToString(), Company = value["Company"].ToString() }).ToList();
if (File.Exists(ConfigurationManager.AppSettings["OutlookFileFolder"].ToString() + "\\" + Filename))
{
File.Delete(ConfigurationManager.AppSettings["OutlookFileFolder"].ToString() + "\\" + Filename);
}
}
}
catch (Exception ex)
{
}
List lstBulkUser=newlist();
DataView BlukUserView;
尝试
{
使用(SqlDataSource\u SqlDataSource=new SqlDataSource())
{
//_SqlDataSource.ConnectionString=“Dsn=outlook;dbq=D:\\selvam\\projectlist\\lates\\trunk\\SLVconsoleApp\\SLVconsoleApp.Web\\Uploads\\CSVFiles;defaultdir=D:\\selvam\\projectlist\\lates\\trunk\\SLVconsoleApp.Web\\Uploads\\CSVFiles;driverid=27;fil=text;maxbuffersize=2048;pagetimeout=5”;
_SqlDataSource.ConnectionString=“Dsn=”+ConfigurationManager.AppSettings[“OutlookDns”].ToString()+“dbq=”+ConfigurationManager.AppSettings[“OutlookFileFolder”].ToString()+“defaultdir=”+ConfigurationManager.AppSettings[“OutlookFileFolder”].ToString()+“driverid=27;fil=text;maxbuffersize=2048;pagetimeout=5”;
_SqlDataSource.SelectCommand=“选择[First Name]作为名字,[Last Name]作为姓氏,选择公司,[E-mail Address]作为来自[“+Filename+”]”的EMAILID;
_SqlDataSource.ProviderName=“System.Data.Odbc”;
BlukUserView=(DataView)_SqlDataSource.Select(DataSourceSelectArguments.Empty);
int i=1;
_lstBulkUser=(从BlukUserView.Table.Select()中的值选择新的BulkUser{ID=Convert.ToString(i++),FirstName=Convert.ToString(Encoding.UTF8.GetString((byte[])value[“First_Name”]),LastName=value[“LAST_Name”]。ToString(),EmailId=value[“EmailId”]。ToString(),Company=value[“Company”]。ToString())。ToList();
if(File.Exists(ConfigurationManager.AppSettings[“OutlookFileFolder”].ToString()+“\\”+文件名))
{
File.Delete(ConfigurationManager.AppSettings[“OutlookFileFolder”].ToString()+“\\”+文件名);
}
}
}
捕获(例外情况除外)
{
}
它抛出Unable,将“System.String”类型的对象强制转换为“System.Byte[]”类型。
即使我尝试了Unicode字符,它也不是!我如何克服这个问题
下面是csv文件的屏幕截图
CSV不支持使用多语言字符。我已检查到Ms office 2010
最好保存为xls或xlsx。处理此情况的最简单方法。最好张贴触发此错误的输入条件,以便快速获得帮助。随附屏幕截图。请看一看。我不知道你的图片上显示的语言(不知道语言,逻辑上也不知道编码)。通常,在读取不同语言(而不是程序中默认编码系统所记录的语言)时触发的错误是由于选择了错误的编码(您应该知道应该应用哪种编码)引起的。在您的特定代码中,我不确定对字节进行强制转换的意义何在(究竟是什么引起了错误)。@varocabas在对该XL中的日语字符进行编码时,实际上会抛出该错误。我需要绑定的名字,姓氏,公司和电子邮件地址可能在不同的语言。所以我需要unicode支持。这是我的实际问题。如果你有不同的编码,你必须考虑不同的编码(知道给定文本块的确切编码根本不是一件容易的事);在任何情况下,如果选择了错误的编码,都应该得到一堆奇怪的符号,而不是一个错误。同样,这一行对字节的转换似乎是错误的(实际上这就是错误所说的)。我不习惯这种特殊情况;但是如果你发布了一个相关的输入集,我(或其他任何人)可能会做一个快速测试来帮助你。