Skip to content
Navigation Menu
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up
Appearance settings
Description
In universal windows app, calling Encoding.GetEncoding(«windows-1251») will throw an exception
An exception of type ‘System.ArgumentException’ occurred in mscorlib.ni.dll but was not handled in user code
Additional information: ‘windows-1251’ is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.
same for euc-kr charset.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Cito { class Program { static void Main(string[] args) { string a = File.ReadAllText("1.txt", Encoding.GetEncoding(1251)); string b = File.ReadAllText("2.txt", Encoding.GetEncoding(1251)); int nom; int smehenie; string rezyltat; int per,per2 ; int nym = 0; char[] massage = a.ToCharArray(); char[] key = b.ToCharArray(); char[] alfavit = { 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' }; // Перебираем каждый символ сообщения for (int i = 0; i < massage.Length; i++) { // Ищем индекс буквы for (per = 0; per < alfavit.Length; per++) { if (massage[i] == alfavit[per]) { break; } } if (per != 33) // Если j равно 33, значит символ не из алфавита { nom = per; // Индекс буквы // Ключ закончился - начинаем сначала. if (nym > key.Length - 1) { nym = 0; } // Ищем индекс буквы ключа for (per2 = 0; per2 < alfavit.Length; per2++) { if (key[nym] == alfavit[per2]) { break; } } nym++; if (per2 != 33) // Если f равно 33, значит символ не из алфавита { smehenie = nom + per2; } else { smehenie = nom; } // Проверяем, чтобы не вышли за пределы алфавита if (smehenie > 32) { smehenie = smehenie - 33; } massage[i] = alfavit[smehenie]; // Меняем букву } } rezyltat = new string(massage); // Собираем символы обратно в строку. File.WriteAllText("3.txt", rezyltat); // Записываем результат в файл. } } } |
File.ReadAllText() заменяет русские символы на ?????, вне зависимости от кодировки. Если я ставлю что-то кроме Encoding.Default, то знаками вопроса он заменяет вообще весь текст
-
Вопрос задан
-
551 просмотр
Комментировать
Подписаться
1
Простой
Комментировать
Решения вопроса 1
Короче оказывается Visual Studio при запуске копировала файл в не той кодировке
Комментировать
Пригласить эксперта
Ответы на вопрос 2
У этого метода есть вот такая перегрузка:
ReadAllText(String, Encoding)
В вашем случае, нужно использовать её.
Либо читаешь криво — не с той кодировкой (но видимо это не так).
Либо пишешь криво — например при выводе в консоль, когда она не юникодная.
Без твоего файла и кода сказать сложно.
Ваш ответ на вопрос
Войдите, чтобы написать ответ
Похожие вопросы
-
Показать ещё
Загружается…
Минуточку внимания
ArgumentException: Encoding name ‘windows-1251’ not supporte
ArgumentException: Encoding name ‘windows-1251’ not supporte
Добрый день. Проблема при билде на Ios ArgumentException: Encoding name ‘windows-1251’ not supported.
Я пересохранял скрипт с кодировкой ютф, внутри кода ставил
Используется csharp
var encoding = Encoding.GetEncoding(«UTF-16»);
добавлял дллки. Не работает. Вернее раз через раз работает.
Уже сломал всю голову себе втф
- T116
- UNец
- Сообщения: 38
- Зарегистрирован: 28 янв 2017, 02:35
Вернуться в Mac OS X
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Формулировка задачи:
using System.IO; using System.Net; using System.Text; namespace Testparser { class HtmlDownloadHelper { /// <summary> /// Скачать страницу /// </summary> /// <param name="uri">страница сайта</param> /// <returns>исходный код</returns> public static string DownloadHtml(string uri) { var req = (HttpWebRequest)WebRequest.Create(uri); var resp = (HttpWebResponse)req.GetResponse(); //if (resp.CharacterSet == "cp1251") // resp.CharacterSet = "windows-1251"; using (var stream = new StreamReader(stream: resp.GetResponseStream(), encoding: Encoding.GetEncoding(resp.CharacterSet))) { var html = stream.ReadToEnd(); return html; } } } }
Есть сайт «http://www.iitrust.ru/region/uc/tarif.php»
с него приходит resp.CharacterSet = «cp1251»
и вылетает исключение как это грамотно обойти у этого свойства только геттер
или как допилить что бы всю возможную запись в чартерсет он воспринимал
это же я думаю ни один такой случай
Решение задачи: «Additional information: ‘cp1251’ is not a supported encoding name»
textual
using (var resp = req.GetResponse()) { var encoding = resp.CharacterSet == "cp1251" ? Encoding.GetEncoding(1251) : Encoding.UTF8; using (var stream = new StreamReader(resp.GetResponseStream(), encoding)) { return stream.ReadToEnd(); } }
Оцени полезность:
6 голосов , оценка 3.833 из 5