.NET Core не знает о Windows 1252, как это исправить?

Эта программа прекрасно работает при компиляции для.NET 4, но работает при компиляции для.NET Core. Я понимаю ошибку о кодировке не поддерживается, но не как исправить это.

Public Class Program
    Public Shared Function Main(ByVal args As String()) As Integer
        System.Text.Encoding.GetEncoding(1252)
    End Function
End Class

3 ответа

Решение

Для этого необходимо зарегистрировать CodePagesEncodingProvider экземпляр из System.Text.Encoding.CodePages пакет.

Для этого установите https://www.nuget.org/packages/System.Text.Encoding.CodePages/:

dotnet add package System.Text.Encoding.CodePages

Затем (после неявного или явного выполнения dotnet restore) ты можешь позвонить:

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

Кроме того, если вам нужна только одна кодовая страница, вы можете получить ее напрямую, без регистрации:

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

Пожалуйста, напишите:

<ItemGroup>
    <PackageReference Include="System.Text.Encoding.CodePages" Version="4.3.0" />
</ItemGroup>

в csproj.

В консоли пакета напишите ' dotnet restore', восстановите сборки.

и вот этот код для образца:

public class MyClass
{
    static MyClass()
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    }
}

Вот замечания для:

.NET Framework для настольных компьютеров Windows поддерживает большой набор кодировок Юникода и кодовых страниц. С другой стороны, .NET Core поддерживает только следующие кодировки:

  • ASCII (кодовая страница 20127), который возвращается свойством Encoding.ASCII.
  • ISO-8859-1 (кодовая страница 28591).
  • UTF-7 (кодовая страница 65000), возвращаемая свойством Encoding.UTF7.
  • UTF-8 (кодовая страница 65001), возвращаемая свойством Encoding.UTF8.
  • UTF-16 и UTF-16LE (кодовая страница 1200), возвращаемые свойством Encoding.Unicode.
  • UTF-16BE (кодовая страница 1201), экземпляр которого создается путем вызова конструктора UnicodeEncoding.UnicodeEncoding или UnicodeEncoding.UnicodeEncoding со значением bigEndian, равным true.
  • UTF-32 и UTF-32LE (кодовая страница 12000), возвращаемые свойством Encoding.UTF32.
  • UTF-32BE (кодовая страница 12001), экземпляр которого создается путем вызова конструктора UTF32Encoding, имеющего параметр bigEndian и предоставляющего значение true при вызове метода.

Кодировки кодовых страниц, кроме кодовой страницы 20127, не поддерживаются. Класс расширяетсяEncodingProviderчтобы сделать эти кодовые страницы доступными для .NET Core.

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

      Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

предоставляет доступ к поставщику кодирования для кодовых страниц, которые в противном случае доступны только в настольной версии .NET Framework.

После этого вы сможете найти больше кодировок и получитьWindows-1252слишком:

      Encoding win1252 = Encoding.GetEncoding(1252);

Обратите внимание, что вам нужна ссылка наSystem.Text.Encoding.CodePages.dllиспользоватьCodePagesEncodingProviderв некоторых версиях .net вам необходимо добавить пакет nuget в свой проект.

      Install-Package System.Text.Encoding.CodePages
Другие вопросы по тегам