Вы правы, полагая, что Windows-1252 поддерживает перечисленные выше специальные символы (полный список см. В записи Википедии ).
using (var writer = new StreamWriter(destination, true, Encoding.GetEncoding(1252)))
{
writer.WriteLine(source);
}
В моем тестовом приложении с использованиемприведенный выше код дает такой результат:
Look at the cool letters I can make: å, æ, and ø!
Вопросительных знаков не найдено.Вы устанавливаете кодировку, когда читаете ее с помощью StreamReader
?
РЕДАКТИРОВАТЬ: Вы просто сможете использовать Encoding.Convert
для преобразования файла VCF UTF-8 в Windows1252.Нет необходимости в Regex.Replace
.Вот как я бы это сделал:
// You might want to think of a better method name.
public string ConvertUTF8ToWin1252(string source)
{
Encoding utf8 = new UTF8Encoding();
Encoding win1252 = Encoding.GetEncoding(1252);
byte[] input = source.ToUTF8ByteArray(); // Note the use of my extension method
byte[] output = Encoding.Convert(utf8, win1252, input);
return win1252.GetString(output);
}
А вот как выглядит мой метод расширения:
public static class StringHelper
{
// It should be noted that this method is expecting UTF-8 input only,
// so you probably should give it a more fitting name.
public static byte[] ToUTF8ByteArray(this string str)
{
Encoding encoding = new UTF8Encoding();
return encoding.GetBytes(str);
}
}
Также вы, вероятно, захотите добавить using
с вашим ReadFile
и WriteFile
методам.