我有这段代码:
string ABSfilePath = "";
CsvFileReader reader = null;
ABSfilePath = Server.MapPath("/myfile.csv");
try
{
reader = new CsvFileReader(ABSfilePath);
CsvRow myRow = new CsvRow();
while (reader.ReadRow(myRow))
{
Response.Write(myRow[0].ToString()+"<br />");
}
}
catch (Exception err)
{
Response.Write(err.Message);
}
finally
{
if (reader != null)
reader.Dispose();
}
但是当我尝试导入我的文件myfile.csv
时,一些字符被“不正确”编码,如:
STATUA DELLA LIBERT�
那么,怎么编码呢?感谢
答案 0 :(得分:2)
reader = new CsvFileReader(ABSfilePath);
是罪魁祸首。您应该首先使用正确的编码打开StreamReader(我怀疑是UTF-8),
StreamReader MyStreamReader = new StreamReader(ABSfilePath, System.Text.Encoding.WhateverYouNeed);
然后做
reader = new CsvFileReader(MyStreamReader.BaseStream);
答案 1 :(得分:1)
在您的情况下会发生的情况是CSV的编码和页面的编码(html)不匹配...您要么确保两者都使用相同的编码,要么在读取时转换CSV的编码。我不知道您使用哪个类/库CsvFileReader
,但最简单的方法是使用正确的编码打开CSV,例如使用StreamReader
而不是ABSFilePath
作为参数。
答案 2 :(得分:1)
您使用的是非标准类,我猜您使用的是this one。它的设计很差,它不会让你以任何方式改变编码。您需要添加一个新的构造函数来修复它:
public CsvFileWriter(string filename, Encoding encoding)
: base(filename, encoding)
{
}
现在你可以让它读取除了utf-8以外的东西。最好的开始是Encoding.Default。