[英]Read Csv file encoding error
我使用以下方法來讀取Csv文件內容:
/// <summary>
/// Reads data from a CSV file to a datatable
/// </summary>
/// <param name="filePath">Path to the CSV file</param>
/// <returns>Datatable filled with data read from the CSV file</returns>
public DataTable ReadCsv(string filePath)
{
if (string.IsNullOrEmpty(filePath))
{
log.Error("Invalid CSV file name.");
return null;
}
try
{
DataTable dt = new DataTable();
string folder = FileMngr.Instance.ExtractFileDir(filePath);
string fileName = FileMngr.Instance.ExtractFileName(filePath);
string connectionString =
string.Concat(@"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=",
folder, ";");
using (OdbcConnection conn =
new System.Data.Odbc.OdbcConnection(connectionString))
{
string selectCommand = string.Concat("select * from [", fileName, "]");
using (OdbcDataAdapter da = new OdbcDataAdapter(selectCommand, conn))
{
da.Fill(dt);
}
}
return dt;
}
catch (Exception ex)
{
log.Error("Error loading CSV content", ex);
return null;
}
}
如果我有一個UTF-8編碼的Csv文件,其schema.ini看起來像這樣:
[Example.csv]
Format=Delimited(,)
ColNameHeader=True
MaxScanRows=2
CharacterSet=ANSI
如果我在具有Unicode編碼的Csv文件中有德語字符,則該方法無法正確讀取數據。
我可以對上述讀取Unicode Csv文件的方法進行哪些修改? 如果沒有辦法這樣做,你能建議什么樣的Csv閱讀代碼?
嘗試在schema.ini文件中使用CharacterSet=UNICODE
。 雖然這在MSDN上沒有記錄,但它可以根據Microsoft論壇上的這個主題進行操作 。
好吧, CodeProject上有一個非常好用的流式CSV讀取器; 這是我嘗試的第一件事......但聽起來你的編碼可能會被剔除,這可能不會讓它變得簡單......當然,它可能只是破壞了,在這種情況下上面可能會有效精細。
對於簡單的CSV,您可以嘗試自己解析它( string.Split
等),但是有足夠的邊緣情況,預卷解析器值得使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.