2016-10-30 48 views
5

W net45, Encoding.GetEncoding("Shift-JIS") działa dobrze, ale pod netstandard rzuca:Shift-JIS kodowania dla netstandard biblioteki

System.ArgumentException: 'Shift-JIS' nie jest obsługiwana nazwa kodowania. Informacje na temat definiowania niestandardowego kodowania znajdują się w dokumentacji metody Encoding.RegisterProvider.

Dokumentacja odnosi się do wzmianki wsparcia za pośrednictwem CodePagesEncodingProvider NET rdzenia Native pod UWP, ale nic do zastosowań ogólnych z netstandard.

Czy możliwe jest użycie kodowania Shift-JIS w bibliotece netstandard?

+0

CodePagesEncodingProvider jest dostarczany z pakietem System.Text.Encoding.CodePages, który nie jest częścią standardu netstandard (https://github.com/dotnet/corefx/blob/master/pkg/NETStandard.Library/NETStandard.Library.packages. cele), ale jest częścią netcore, więc myślę, że odpowiedź brzmi nie, chyba że napiszesz własny Kodowanie i KodowanieProvider. Powodem, dla którego System.Text.Encoding.CodePages nie jest częścią standardu netto jest, jak sądzę, ponieważ opiera się dzisiaj na Windows API/zasobach. –

Odpowiedz

4

Tak, jest to możliwe. Odnośnik System.Text.Encoding.CodePages pakiet w project.json:

"System.Text.Encoding.CodePages": "4.0.1" 

Wywołuje następujący kod przed coraz kodowanie Shift-JIS:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 

i jesteś dobry, aby przejść z:

Encoding.GetEncoding("Shift-JIS") 

AKTUALIZACJA:

System.Text.Encoding.CodePages nie jest zawarty w NETStandard.Library 1.6 package, ale nie ma problemu z odniesieniem się do System.Text.Encoding.CodePages z biblioteki klas netstandard (dopóki biblioteka klas nie będzie mieć wartości docelowej netstandard1.2 lub niższej).

Oto sample solution with the code. Istnieje biblioteka klas, która jest skierowana na netstandard1.3 i konsolową aplikację konsolową, która jest skierowana na netcoreapp1.0 i odwołuje się do biblioteki klas. Biblioteka klas zawiera kod odpowiadający kodowaniu Shift-JIS. Może również być przywoływany i wykorzystywany przez aplikacje kierowane na inne frameworki.

+0

Simon Mourier już to wskazał. Jest obsługiwany przez .NET Core, ale nie "netstandard". Tworzę bibliotekę 'netstandard', więc nie mogę jej użyć. Zaktualizuję tytuł pytania, aby był bardziej przejrzysty, chociaż zostało to wyjaśnione w pytaniu. Plus już wspomniałem twoją odpowiedź w moim pytaniu. –

+0

"To nie jest obsługiwane" wydaje się być zwrotem, którego nikt nigdy nie rozumie. Ostre problemy ze zrozumieniem czytanego tekstu nie są twoim problemem do rozwiązania, nie są prawdziwymi problemami. Niezła odpowiedź. –

+0

@Drew Noakes Zaktualizowałem odpowiedź, biorąc pod uwagę twój komentarz. – Deilan