Member 8337007 Ответов: 2

Чтение CSV - файла с китайскими иероглифами с помощью OLEDB


Привет, то, что я сейчас делаю, - это импортирую csv-файл с китайскими иероглифами с помощью OLEDB и записываю его(OledbAdapter.Fill) в datatable. Когда я читаю информацию из datatable, моя ожидаемая информация становится ÁõÈý½ã

Что я сделал:
1 - Установите набор символов базы данных и таблиц в "utf8 -- UTF-8 Unicode", а параметры сортировки - "utf8_general_ci".
2 - в web.config добавьте затем информацию ниже в теге "глобализация" ниже в теге "system.web" .:
requestencoding="utf-8" responseencoding="utf-8" fileencoding="utf-8" culture=" " uiculture=""
3 - в html-теге <head> Я включаю эту строку:
<META http-equiv="Content-Type" content="text/html; charset=UTF-8" />
4 - мой код csvParses:
string full = Path.GetFullPath(path);
string file = Path.GetFileName(full);
string dir = Path.GetDirectoryName(full);
string header = isHeader ? "Yes" : "No";

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + dir + "\\\";Extended Properties=\"text;HDR=" + header + ";FMT=Delimited;CHARSET=utf8\"";
string query = "SELECT * FROM " + file;
DataTable dTable = new DataTable();
OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);
dAdapter.Fill(dTable);


Когда я получаю информацию из этой таблицы dtable, китайские иероглифы становятся ÁõÈý½ã. Могу я узнать, какие вещи я могу упустить? Ваша помощь очень ценится, заранее спасибо.:)

Sergey Alexandrovich Kryukov

Я надеюсь, что "китайский" означает Unicode, не так ли? Тоже UTF-8? С Бом или без него?
--СА

Member 8337007

Спасибо за ответ:)
да, это Unicode, и это тоже UTF-8. Я не уверен насчет спецификации. Как проверить, есть ли мой файл с/без спецификации?
На самом деле я получил эту проблему, когда я запускаю свой код на сервере. Он работает, как и ожидалось(показывает правильные китайские иероглифы) в моем localhost.
Я что - то упускаю?

Mehdi Gholam

Вы проверили правильность вашего исходного файла ie имеет китайские иероглифы?

Member 8337007

Спасибо за ответ:)
Да, я проверил свой исходный файл, и он правильный (с китайскими черактерами).
На самом деле я получил эту проблему, когда я запускаю свой код на сервере. Он работает, как и ожидалось(показывает правильные китайские иероглифы) в моем localhost.
Я что - то упускаю?

Mehdi Gholam

Проверьте также языковые настройки ваших серверов, это может быть английский язык.

Member 8337007

Для "языка для программ, отличных от Unicode", выбран "английский (Соединенные Штаты)"; были выбраны все опции для "таблиц преобразования кодовых страниц"; для "дополнительной языковой поддержки" были установлены файлы для сложных скриптовых и правосторонних языков, а также восточноазиатских языков.
Я думаю, что системные настройки локали сервера находятся на английском языке (извините, я не очень хорошо разбираюсь в технических вопросах)

2 Ответов

Рейтинг:
0

Mehdi Gholam

Попробуйте использовать этот очень хороший парсер : Быстрый читатель CSV[^]


Рейтинг:
0

Bill Capone

The above solution did NOT work for me, but it was close.  What DID work:

Change the following lines from:
string file = Path.GetFileName(full);
string query = "SELECT * FROM " + file;
//The line with:
...FMT=Delimited;CHARSET=utf8\""

To:
string file = Path.GetFileName(stringFileName); //That is the name of your file
string query = "SELECT * FROM [" + file + "]"; //Need the brackets
//Change to:
...FMT=Delimited;CharacterSet=65001;\""