Строка OleDbConnection и Юникод - PullRequest
2 голосов
/ 19 марта 2012

В моей программе я читаю данные из файла HTML, однако в этом файле иногда есть фрагменты текстовых данных, содержащие символы Юникода, которые преобразуются обратно в UTF-8:

Michèle ->Michèle

Я использую следующий код для извлечения данных из файла:

        string ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"HTML import;CharacterSet=UNICODE;HDR=NO;IMEX=1;MaxScanRows=0;TypeGuessRows=0\";", fileName);

        using (OleDbConnection cn = new OleDbConnection(ConnectionString))
        {
            cn.Open();

            using (OleDbCommand cm = cn.CreateCommand())
            {
                string pageName = "bestelformulier";
                cm.CommandText = string.Format("Select * from [{0}]", pageName);
                cm.CommandType = CommandType.Text;

                var da = new OleDbDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);

                var dt = ds.Tables[0];

                ProcessRows(dt);
            }
        }

Я искал в Google, пытаясь выяснить, как "сказать" OleDb использоватьUnicode при чтении файла, но я пока не нашел решения (использование расширенного свойства CharacterSet = UNICODE, похоже, не работает).Может ли кто-нибудь здесь помочь мне?

спасибо, Jurjen.

20-mrt-2012, 15.41

Я не нашел решения, но создал небольшую функцию для восстановлениястрока в исходное состояние, вот что я сейчас использую для всех строковых полей после чтения данных.

    private static Encoding iso = Encoding.GetEncoding("ISO-8859-1");
    public static string RepairUTF8(this string value)
    {
        byte[] bytes = iso.GetBytes(value);

        if (bytes.Any(o => o.Equals(195)))
        {
            return Encoding.UTF8.GetString(bytes);
        }

        return value;
    }
...