StreamWriter Encoding.Default использует разные кодировки? - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь экспортировать файл в старую программу, которая не распознает Unicode (во всей моей базе данных используется кодировка utf8_unicode_ci ).

При экспорте файла я используюEncoding.Default.

using (StreamWriter sw = new StreamWriter(parcours + "2", false, Encoding.Default))
   {
      foreach (string st in output)
      {
         sw.WriteLine("{0}", st);
      }
   }

Но что странно, в некоторых случаях файл правильно читается, а в других - нет, но я использую точно такую ​​же функцию.

Когда яоткрыть с помощью Notepad ++, я вижу, что файл работает в ANSI , а не работает в Macintosh .

Как я всегда могу экспортировать ANSI?Я предполагаю, что использование значения по умолчанию заставляет его самостоятельно изменять кодировку?

nota: Здесь Говорят, что "ANSI" в блокноте просто означает, что это не Unicode, поэтому я неНе знаю, могу ли я доверять информации в блокноте?

Редактировать : По предложению CodeCaster я использовал Кодировка Windows-1251 , и я вернулся к исходной точке, нопо крайней мере я знаю, что кодировка - это где ошибка?

Честно говоря, я не понимаю, в режиме отладки весь текст в моем списке корректен.Но в некоторых случаях код правильно закодирован, в некоторых - нет.Конкретно вот что я подразумеваю под «работами»:

ДВУТАВР20К2 записывается ДВУТАВР20К2 в файл (это работает).

Двутавр12б1 записывается file¬ »« “¬ – 12Ѕ1 в файл (нене работает).

в строке, там нет кодировки, насколько я знаю, так как я могу это объяснить?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Посмотрев на Кодировку .NET

Вызов Encoding.Default запрашивает у ОС встроенную кодировку Windows, скорее всего, UTF-8.На странице предлагается использовать UTF-8 или UTF-16, когда это возможно (скорее всего, первый).Попробуйте этот пост , если хотите узнать больше.

0 голосов
/ 26 сентября 2018

Когда я открываю с помощью Notepad ++, я вижу, что файл работает в формате ANSI, а файл, который не работает, в Macintosh.

Если вы это сделаете в Google, вы будете обнаружил, что автоопределение кодировки / кодовой страницы Notepad ++ не является безупречным .

Если вы хотите написать кириллицу (что, я полагаю, вам нужно, учитывая местоположение в вашем профиле) с использованием кодовой страницы ANSI (которую вы хотите, потому что программа, для которой вы пишете файл, не понимаетUnicode), кодовая страница, которую вы хотите: Кодовая страница 1251 Windows Кириллица (Славянская) .Чтобы получить кодировку, которая записывает символы в кодовых точках из этой кодовой страницы, используйте Encoding.GetEncoding():

using (StreamWriter sw = new StreamWriter(..., Encoding.GetEncoding("windows-1251")))
{
}

Это означает, что программа, которая читает файлы, также использует этот кодстр.Это проблема с текстовыми файлами, отличными от Unicode, автор и читатель файла должны согласовать кодировку.В конечном итоге вы должны выяснить, какую конкретную кодировку ожидает приложение-потребитель.Я просто предположил здесь, что это на самом деле Windows-1251.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...