У меня есть веб-приложение ASP.Net 4.0, написанное на C #, и одна из его функций - записать файл в файловую систему на основе данных, извлеченных из запроса SQL Server 2012. Иногда пользовательский ввод содержит символы французского языка, часто вырезанные и вставленные из Microsoft Word и, следовательно, в кодировке ANSI. Этот файл, который создает мое веб-приложение, затем загружается в другую программу с помощью кода, находящегося вне моего контроля, т.е. не в моем веб-приложении. Проблема в том, что эта вторая программа требует кодировки UTF-8. Я написал код для преобразования вывода моей программы в UTF-8, но он все еще загружается неправильно, поэтому я думаю, что я делаю что-то не так. Вот мой код:
protected void writeToClientFile(DataSet ClientGenl, DataSet ClientBus, DataSet ClientBill)
{
FileStream fileStream = null;
string fileName = "ClientTest.txt";
string pathName = ConfigurationSettings.AppSettings["EliteFilePath"].ToString();
try
{
using (new KLClassLibrary.Impersonator(proxyaccount, domain, password))
{
fileStream = OpenASAP(pathName + fileName, 10);
using (TextWriter tw = new StreamWriter(fileStream))
{
foreach (DataRow rowGeneral in ClientGenl.Tables[0].Rows)
{
string fileTextGeneral = "CLNUM:" + rowGeneral["clnum"].ToString().toEliteInput();
byte[] originalBytes = Encoding.Default.GetBytes(fileTextGeneral);
byte[] convertedBytes = Encoding.Convert(Encoding.Default, Encoding.UTF8, originalBytes);
char[] convertedChars = new char[Encoding.UTF8.GetCharCount(convertedBytes, 0, convertedBytes.Length)];
Encoding.UTF8.GetChars(convertedBytes, 0, convertedBytes.Length, convertedChars, 0);
string convertedString = new string(convertedChars);
tw.WriteLine(convertedString);
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (fileStream != null)
fileStream.Dispose();
}
}
FileStream OpenASAP(string path, int maxTries)
{
FileStream fs = null;
bool lastResult = false;
int count = 0;
while ((lastResult == false) && count < maxTries)
{
lastResult = TryOpen(path, out fs);
Thread.Sleep(100);
count++;
}
if (!lastResult || count >= maxTries)
{
throw new Exception("The file is being written to");
}
return fs;
}
bool TryOpen(string FileWithPath, out FileStream fs)
{
try
{
fs = File.Open(FileWithPath, FileMode.Append, FileAccess.Write, FileShare.None);
return true;
}
catch (Exception ex)
{
fs = null;
return false;
}
}