Windows 1251 is not a supported encoding name

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

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как записать windows на диск через windows media
  • Error writing temporary file make sure your temp folder is valid windows 7
  • Exception on invalid stack windows 11 ошибка
  • C windows system32 drivers netfilter2 sys
  • Программа для создания загрузочного dvd диска windows 10 из iso образа