Низът за кодиране на StreamWriter е неправилен

Опитвам се да добавя низ base64 към съществуващ файл. Ето моят код:

StreamWriter output = new StreamWriter(file, true, Encoding.ASCII);
output.WriteLine(output.NewLine + str);

Тук file е пътят на файла.

По някаква причина има един конкретен файл (.cs файл, ако има значение), където действителният текст, който се добавя, е низ от китайски символи. Работи според очакванията за всички други файлове, които съм тествал.


person kgh    schedule 12.01.2015    source източник
comment
Низът, който се опитвате да отпечатате, съдържа ли някакви не-ASCII символи? Тоест всеки знак с десетична стойност › 127? Например има ли знак за ред на байтовете в Unicode (en.wikipedia.org/wiki/Byte_order_mark)?   -  person adv12    schedule 12.01.2015
comment
Какво е str в този случай? Възможно ли е да презаписвате съществуващ файл без съкращаване и данните са просто това, което вече е било там?   -  person Marc Gravell    schedule 12.01.2015
comment
Почти гарантирано е, че повреждате файла с грешно (ASCII) кодиране. Проверете дали файлът не е UTF-8 (или друго кодиране).   -  person xxbbcc    schedule 12.01.2015
comment
Създали сте StreamWriter с ASCII кодиране, но вашите китайски йероглифи не са част от ASCII кодирането. Може да искате да опитате кодирането Unicode или може да е по-безопасно за вас да не повредите файла, като изобщо промените кодирането му. Ами ако това не е ASCII-кодиран файл като начало? Кодировките могат да се записват във файлове чрез BOM, което е флаг, използван за определяне на endianness и кодирането на самия файл.   -  person Alexandru    schedule 12.01.2015
comment
Това ще се случи, ако оригиналният файл съдържа utf-16 BOM. Не е необичайно на машина с Windows.   -  person Hans Passant    schedule 12.01.2015


Отговори (1)


Следвайки множеството предложения в коментарите, замених Encoding.ASCII с кодирането на файла, което търся с помощта на отговора на 2Toad тук. Това реши проблема.

person kgh    schedule 12.01.2015