Как кодировать импорт файла CSV? - PullRequest
1 голос
/ 09 февраля 2012

У меня есть этот код:

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�

Итак, как это можно закодировать? Спасибо

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012
reader = new CsvFileReader(ABSfilePath);

виновник. Сначала вы должны открыть StreamReader с правильной кодировкой (я подозреваю, UTF-8),

StreamReader MyStreamReader = new StreamReader(ABSfilePath, System.Text.Encoding.WhateverYouNeed);

тогда делай

reader = new CsvFileReader(MyStreamReader.BaseStream);
1 голос
/ 09 февраля 2012

Вы используете нестандартный класс, я думаю, вы используете этот .Он плохо спроектирован, он не позволяет вам менять кодировку.Вам нужно будет добавить новый конструктор, чтобы исправить это:

    public CsvFileWriter(string filename, Encoding encoding)
        : base(filename, encoding)
    {
    }

Теперь вы можете заставить его читать что-то еще, кроме utf-8.Лучше всего начать с Encoding.Default.

1 голос
/ 09 февраля 2012

Что происходит в вашем случае, так это то, что кодировка CSV и кодировка вашей страницы (html) не совпадают ... вы либо убедитесь, что обе используют одну и ту же кодировку, либо конвертируете кодировку CSV при чтении , Я не знаю, какой класс / библиотеку вы используете CsvFileReader, но проще всего было бы открыть CSV с правильной кодировкой, например, с StreamReader вместо ABSFilePath в качестве параметра .. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...