В моей программе я читаю данные из файла 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;
}