win10 почему VS 2019 не может перекодировать строку в windows-1251
От: klen_  
Дата: 21.03.21 00:09
Оценка:
Всем здрасьте.
это программка WinForms. на форме одна кнопка и два label
то есть всё очень скромно.

подскажите, почему вижел студия не может перекодировать строку в windows-1251
где там надо зарегистрировать Encoding.RegisterProvider method
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
...
...
        string string_Data = "123456 трпр и т.д.";
        //  byte[] data = UTF8Encoding.UTF8.GetBytes( string_Data );  //  РАБОТАЕТ
        //  byte[] data = Encoding.ASCII.GetBytes( string_Data );     //  РАБОТАЕТ

        //  Encoding win1251 = Encoding.GetEncoding(1251);           // ОШИБКА
            Encoding win1251 = Encoding.GetEncoding("windows-1251"); // так тоже ОШИБКА
            byte[] data = win1251.GetBytes( string_Data );

            foreach (byte ch in data)
            {
...
...

VS 2019 пишет:
System.NotSupportedException: "No data is available for encoding 1251.
For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method."

в реестре есть строка codepage 1251 и других nls полно.
большое спасибо.
c#
Re: win10 почему VS 2019 не может перекодировать строку в windows-1251
От: varenikAA  
Дата: 21.03.21 00:49
Оценка: 14 (1)
Здравствуйте, klen_, Вы писали:

_>System.NotSupportedException: "No data is available for encoding 1251.


Это не студия пишет, а компилятор. а установить надо пакет с кодировками, я так полагаю у вас проект коровый.

To do this, you need to register the CodePagesEncodingProvider instance from the System.Text.Encoding.CodePages package.

To do that, install the System.Text.Encoding.CodePages package:

dotnet add package System.Text.Encoding.CodePages

Then (after implicitly or explicitly running dotnet restore) you can call:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var enc1252 = Encoding.GetEncoding(1252);

Alternatively, if you only need that one code page, you can get it directly, without registration:

var enc1252 = CodePagesEncodingProvider.Instance.GetEncoding(1252);

☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: win10 почему VS 2019 не может перекодировать строку в windows-1251
От: VladCore  
Дата: 21.03.21 00:58
Оценка:
Здравствуйте, klen_, Вы писали:


_>Всем здрасьте.

_>это программка WinForms. на форме одна кнопка и два label
_>то есть всё очень скромно.

_>подскажите, почему вижел студия не может перекодировать строку в windows-1251

_>где там надо зарегистрировать Encoding.RegisterProvider method

_>в реестре есть строка codepage 1251 и других nls полно.

_>большое спасибо.


В NET Core нет кодировок из реестра. В том числе и 1251.

NET Core или Framework?
Re[2]: win10 почему VS 2019 не может перекодировать строку в windows-1251
От: klen_  
Дата: 21.03.21 14:50
Оценка:
varenikAA
            var win1251 = CodePagesEncodingProvider.Instance.GetEncoding(1251);
            byte[] data = win1251.GetBytes( string_Data );

Спасибо, это работает!

в свойствах проекта:
"Целевая рабочая среда" .NET 5.0
"Тип выходных данных" приложение Windows

Всех благодарю за совет и участие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.