Неверная строка кодировки 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? Кодировки можно сохранять в файлы через спецификацию, которая является флагом, используемым для определения порядка следования байтов и кодировки самого файла.   -  person Alexandru    schedule 12.01.2015
comment
Это произойдет, если исходный файл содержит спецификацию utf-16. Не редкость на машине с Windows.   -  person Hans Passant    schedule 12.01.2015


Ответы (1)


Следуя многочисленным предложениям в комментариях, я заменил Encoding.ASCII на кодировку файла, которую я ищу, используя ответ 2Toad кодировка файлов">здесь. Это решило проблему.

person kgh    schedule 12.01.2015