Чтение csv файла с помощью средства чтения потока с полями в двойных кавычках японских символов. Его не читают японские символы и принимают его как символы Юникода. Я пробовал разные типы кодирования, но не работал для меня. Пожалуйста, поделитесь мной идеей или каким-то другим решением для решения этой проблемы. Или есть лучший способ сделать это.
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;
}
На ваших скриншотах видно много бриллиантов, поэтому единственное, что кристалл состоит в том, что текстовый файл не закодирован в utf-8. Вы должны очень сильно подумать о том, чтобы связаться с программистом, который сгенерировал файл и попросил исправить. Не используя кодировку Юникода в наши дни, особенно для языка, такого как японский, который имеет много кодировок, ни одна из них не является доминирующей, является большой ошибкой. Это было так плохо, что язык получил свое собственное слово от страданий, которые он вызвал.
Возможности:
Encoding.UTF8
как кодировку считывателя. (Очевидно, что это все еще не кодировка файла, но он уже соответствует вашему предложению предположить, что «вовсе не ASCII, а какой-то UNICODE».)