C # заменяет специальные символы с вопросительными знаками - PullRequest
0 голосов
/ 28 февраля 2019

У меня проблема с кодировкой в ​​c #

Я загружаю xml-файл, закодированный в windows-1250, а затем при сохранении в файл специальные символы, такие как Š и Đ, заменяются на?даже если файл правильно сохранен с использованием кодировки windows-1250.

это пример моего кода (упрощенно):

var res = Encoding.GetEncoding("Windows-1250").GetBytes(client.DownloadString("http://link/file.xml"));
var result = Encoding.GetEncoding("Windows-1250").GetString(res);
File.AppendAllText("file.xml", result);

XML-файл фактически закодирован с использованием windows-1250, и он прекрасно читается, когда я загружаю его с помощью браузера.

кто-нибудь знает, что здесь происходит?

1 Ответ

0 голосов
/ 28 февраля 2019

Проблема может возникнуть из-за двух разных источников, одного в начале и одного в конце вашего фрагмента.И, как уже было отмечено, кодирование и декодирование, которое вы делаете в своем коде, на самом деле бесполезно, потому что источник (то, что возвращает DownloadString) и цель (переменная result) - это строки C # Unicode.

Источник 1: DownloadString

DownloadString не удалось правильно декодировать кодированную строку Windows-1250, поскольку либо сервер не отправил правильную кодировку в Content-Type header или DownloadString даже не поддерживают это (маловероятно, но я не знаком с DownloadString).

Источник 2: File.AppendAllText

Строка была загружена правильно,затем кодируется в памяти в Windows-1250, затем снова декодируется в строку Unicode, и все работает хорошо.Но затем он был записан File.AppendAllText в другой кодировке по умолчанию.AppendAllText имеет необязательный третий параметр, который можно использовать для указания кодировки.Вы должны установить это в Windows-1250, чтобы фактически записать файл в кодировке Windows-1250.

Кроме того, убедитесь, что любой редактор, который вы используете для открытия файла, использует одну и ту же кодировку - это часто не очень легкогарантии, поэтому я бы посоветовал вам открыть его в «удобном для разработчика» редакторе, который позволяет указать кодировку при открытии текстового файла.(Vim, Emacs, Notepad ++, Visual Studio, ...).

...