使用带有双引号日文字符的字段的流阅读器读取csv文件。它不读日文字符并将其视为unicode字符。我尝试了不同的编码类型,但它不适合我。请与我分享一些想法或解决此问题的其他解决方案。或者有更好的方法来做到这一点。
public DataTable ReadDataFromCSV(string path, char delim)
{
string fulltext;
string[] arrColumnNames;
string[] arrColumnValues;
string[] arrRows;
int i, j, n;
System.Data.DataTable dt = new System.Data.DataTable();
DataRow row;
if (delim.ToString().Length < 1)
{
delim = ',';
}
try
{
//' check that the file exists before opening it
if (File.Exists(path))
{
using (TextReader sr = new StreamReader(path,Encoding.UTF8))
{
fulltext = sr.ReadToEnd();
arrRows = fulltext.Split('\n');
arrColumnNames = arrRows[0].Replace('"', ' ').Trim().Split(delim);
//'add columns to a datatable
for (n = 0; n < arrColumnNames.Length - 1; n++)
{
dt.Columns.Add(new DataColumn(arrColumnNames[n], System.Type.GetType("System.String")));
}//next
for (i = 1; i < arrRows.Length - 1; i++)
{
arrColumnValues = arrRows[i].Replace('"', ' ').Trim().Split(delim);
row = dt.NewRow();
for (j = 0; j < (arrColumnNames.Length - 1); j++)
{
try
{
if (!(arrColumnValues[j] == null))
{
row[arrColumnNames[j]] = arrColumnValues[j].Replace('"', ' ').Trim();
}
else
{
row[arrColumnNames[j]] = "";
}//End If
}
catch (Exception ex)
{
Console.Write("ERROR: " + ex.Message);
}
}//next
dt.Rows.Add(row);
}//next
}
}//End if
}
catch (Exception ex)
{
Console.Write("ERROR: " + ex.Message);
}
finally
{
}//End Try
return dt;
}
答案 0 :(得分:7)
屏幕截图中可以看到很多钻石,因此唯一的结果是文本文件在utf-8中不编码。您应该非常强烈地考虑与生成该文件的程序员联系并要求修复。这些天不使用Unicode编码,特别是对于像日语这样有许多编码的语言,没有一个是主导,这是一个巨大的错误。语言因为它造成的痛苦而得到own word这是非常糟糕的。
的可能性: