2015-03-31 12 views
0

У меня возникла проблема с выходом моего файла. Мне нужно записать в файл символ ý и þ. Я могу сделать это с помощью Convert.ToChar (0253) & Convert.ToChar (0254). Это старая программа, которую я переписал на C# из базового +. Старая программа создала простой текстовый файл, который, если бы он был открыт в текстовом поле, выдавал специальные символы ý & þ. Однако, когда я создаю файл и открываю его в wordpad, он отображает символы как ý и þ. Ниже представлен выходной файл, открытый как в блокноте, так и в текстовом поле. Как я могу выводить символы так, чтобы они отображались как ý и þ как в блокноте, так и в текстовом поле? Я также добавил свой код ниже. Заранее спасибо.Как кодировать специальный символ?

Это делает хорошо в блокноте, как так:

3/31/2015ý15þ 
14182515þ 
ENDþ 

Однако, при открытии файла в WordPad он делает так:

3/31/2015ý15þ 
14182515þ 
ENDþ 


textOut.WriteLine(shortDate + Convert.ToChar(0253) + cRenPer + Convert.ToChar(0254)); 
+1

Почему бы вам не сохранить как UTF8 или даже UTF16? –

+0

Вам нужно установить кодировку ... что такое 'textOut'? – Sayse

+0

Текстовый поток - это потоковик. Вот фрагмент кода. StreamWriter textOut = новый StreamWriter (новый FileStream ((dirPath + batchNum + ".REN"), FileMode.Create, FileAccess.Write)); –

ответ

0

Вы можете записать в файл, используя следующий код, обратите внимание на второй параметр кодирования. Это повлияет на кодирование файла, что, в свою очередь, повлияет на то, как он будет обрабатываться различными текстовыми редакторами.

string fileName = "myFile.txt"; 
using (TextWriter textOut = new StreamWriter(File.OpenWrite(fileName),System.Text.Encoding.Unicode)) 
{ 
     textOut.WriteLine(Convert.ToChar(0254)); 
} 
1

Вы можете установить кодировку при определении StreamReader

StreamWriter textOut = new StreamWriter(new FileStream((dirPath + batchNum + ".REN"), 
             FileMode.Create, FileAccess.Write), 
             Encoding.UTF8); 

MSDN for this constructor

+1

Sayse это тоже работает, спасибо за вход –

+1

@ JoshuaOglesbee - Не беспокойтесь, вы также можете посмотреть на использование ['Path.Combine'] (https://msdn.microsoft.com/en-us/library/fyy7a5kt%28v=vs.110%29.aspx) до создайте свои пути к файлам, это поможет убедиться, что у вас нет слишком много/и что они правильные пути для любой платформы, на которой вы находитесь;) Также обратите внимание на «Encoding.UTF8», вы не нужно воссоздать его :) – Sayse

1

Так, как предложил Торстен Dittmar мне нужно кодировать поток-писатель, как utf8. Это позволило прочитать файл как имеющееся ранее приложение так и должно быть. Ниже приводится изменение класса stream-writer.

StreamWriter textOut = new StreamWriter((dirPath + batchNum + ".REN"), false, new UTF8Encoding(true)); 

Это изменение: Я в конечном итоге изменил код. Хотя текстовый файл правильно интерпретировался в текстовом блоке, он по-прежнему не читался устаревшим приложением. Модифицированный код приведен ниже:

+0

Я включил свой комментарий в ответ.Как правило, не нужно писать свой собственный ответ, поэтому я предлагаю вам удалить этот ответ и принять тот, который вам помог (например, мой, как вы писали в своем ответе, что мой комментарий приведет вас к решению вашей проблемы :-) –

+0

@ThorstenDittmar - я не думаю, что удаление необходимо, хорошо видеть, что OP пришел к решению, основанному на комментариях, я согласен, хотя это вообще не требуется – Sayse

2

При записи файла необходимо указать кодировку UTF8 или UTF16. Вы можете сделать это следующим образом:

StreamWriter writer = new StreamWriter(<file path>, false, Encoding.UTF8); 
Смежные вопросы