最近、SJISのテキストファイルを.net 5でいじる必要があって、忘れていたことがあったので、メモ。
.net coreや.net 5では、デフォルトのエンコーディングセットとして、Shift_JISはサポートされていない。
CodePage=1200, Name=utf-16 ,DisplayName=Unicode
CodePage=1201, Name=utf-16BE ,DisplayName=Unicode (Big-Endian)
CodePage=12000, Name=utf-32 ,DisplayName=Unicode (UTF-32)
CodePage=12001, Name=utf-32BE ,DisplayName=Unicode (UTF-32 Big-Endian)
CodePage=20127, Name=us-ascii ,DisplayName=US-ASCII
CodePage=28591, Name=iso-8859-1 ,DisplayName=Western European (ISO)
CodePage=65001, Name=utf-8 ,DisplayName=Unicode (UTF-8)
Shift_JISやEUCなどを使用したい場合は、System.Text.Encoding.CodePagesパッケージが必要となる。
> dotnet add <プロジェクトフォルダ> package System.Text.Encoding.CodePages
これをプロジェクトに追加するだけではダメで、Encododingを取得する以前にプログラム中で下記処理を実行することが必要となる。
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
これで、GetEncoding(“Shift_JIS”)でShift_JISエンコーディングを取得することが可能となる。ちなみに、エンコーディングリストを見てみたのだが、ISO-2022-JPが無いようにみえるのだが・・・まぁ、メール以外には使わないけど。
CodePage=37, Name=IBM037 ,DisplayName=IBM037
CodePage=437, Name=IBM437 ,DisplayName=IBM437
CodePage=500, Name=IBM500 ,DisplayName=IBM500
CodePage=708, Name=ASMO-708 ,DisplayName=ASMO-708
CodePage=720, Name=DOS-720 ,DisplayName=DOS-720
CodePage=737, Name=ibm737 ,DisplayName=ibm737
CodePage=775, Name=ibm775 ,DisplayName=ibm775
CodePage=850, Name=ibm850 ,DisplayName=ibm850
CodePage=852, Name=ibm852 ,DisplayName=ibm852
CodePage=855, Name=IBM855 ,DisplayName=IBM855
CodePage=857, Name=ibm857 ,DisplayName=ibm857
CodePage=858, Name=IBM00858 ,DisplayName=IBM00858
CodePage=860, Name=IBM860 ,DisplayName=IBM860
CodePage=861, Name=ibm861 ,DisplayName=ibm861
CodePage=862, Name=DOS-862 ,DisplayName=DOS-862
CodePage=863, Name=IBM863 ,DisplayName=IBM863
CodePage=864, Name=IBM864 ,DisplayName=IBM864
CodePage=865, Name=IBM865 ,DisplayName=IBM865
CodePage=866, Name=cp866 ,DisplayName=cp866
CodePage=869, Name=ibm869 ,DisplayName=ibm869
CodePage=870, Name=IBM870 ,DisplayName=IBM870
CodePage=874, Name=windows-874 ,DisplayName=windows-874
CodePage=875, Name=cp875 ,DisplayName=cp875
CodePage=932, Name=shift_jis ,DisplayName=shift_jis
CodePage=936, Name=gb2312 ,DisplayName=gb2312
CodePage=949, Name=ks_c_5601-1987 ,DisplayName=ks_c_5601-1987
CodePage=950, Name=big5 ,DisplayName=big5
CodePage=1026, Name=IBM1026 ,DisplayName=IBM1026
CodePage=1047, Name=IBM01047 ,DisplayName=IBM01047
CodePage=1140, Name=IBM01140 ,DisplayName=IBM01140
CodePage=1141, Name=IBM01141 ,DisplayName=IBM01141
CodePage=1142, Name=IBM01142 ,DisplayName=IBM01142
CodePage=1143, Name=IBM01143 ,DisplayName=IBM01143
CodePage=1144, Name=IBM01144 ,DisplayName=IBM01144
CodePage=1145, Name=IBM01145 ,DisplayName=IBM01145
CodePage=1146, Name=IBM01146 ,DisplayName=IBM01146
CodePage=1147, Name=IBM01147 ,DisplayName=IBM01147
CodePage=1148, Name=IBM01148 ,DisplayName=IBM01148
CodePage=1149, Name=IBM01149 ,DisplayName=IBM01149
CodePage=1200, Name=utf-16 ,DisplayName=Unicode
CodePage=1201, Name=utf-16BE ,DisplayName=Unicode (Big-Endian)
CodePage=1250, Name=windows-1250 ,DisplayName=windows-1250
CodePage=1251, Name=windows-1251 ,DisplayName=windows-1251
CodePage=1252, Name=windows-1252 ,DisplayName=windows-1252
CodePage=1253, Name=windows-1253 ,DisplayName=windows-1253
CodePage=1254, Name=windows-1254 ,DisplayName=windows-1254
CodePage=1255, Name=windows-1255 ,DisplayName=windows-1255
CodePage=1256, Name=windows-1256 ,DisplayName=windows-1256
CodePage=1257, Name=windows-1257 ,DisplayName=windows-1257
CodePage=1258, Name=windows-1258 ,DisplayName=windows-1258
CodePage=1361, Name=Johab ,DisplayName=Johab
CodePage=10000, Name=macintosh ,DisplayName=macintosh
CodePage=10001, Name=x-mac-japanese ,DisplayName=x-mac-japanese
CodePage=10002, Name=x-mac-chinesetrad ,DisplayName=x-mac-chinesetrad
CodePage=10004, Name=x-mac-arabic ,DisplayName=x-mac-arabic
CodePage=10005, Name=x-mac-hebrew ,DisplayName=x-mac-hebrew
CodePage=10006, Name=x-mac-greek ,DisplayName=x-mac-greek
CodePage=10007, Name=x-mac-cyrillic ,DisplayName=x-mac-cyrillic
CodePage=10010, Name=x-mac-romanian ,DisplayName=x-mac-romanian
CodePage=10017, Name=x-mac-ukrainian ,DisplayName=x-mac-ukrainian
CodePage=10021, Name=x-mac-thai ,DisplayName=x-mac-thai
CodePage=10029, Name=x-mac-ce ,DisplayName=x-mac-ce
CodePage=10079, Name=x-mac-icelandic ,DisplayName=x-mac-icelandic
CodePage=10081, Name=x-mac-turkish ,DisplayName=x-mac-turkish
CodePage=10082, Name=x-mac-croatian ,DisplayName=x-mac-croatian
CodePage=12000, Name=utf-32 ,DisplayName=Unicode (UTF-32)
CodePage=12001, Name=utf-32BE ,DisplayName=Unicode (UTF-32 Big-Endian)
CodePage=20000, Name=x-Chinese-CNS ,DisplayName=x-Chinese-CNS
CodePage=20001, Name=x-cp20001 ,DisplayName=x-cp20001
CodePage=20002, Name=x-Chinese-Eten ,DisplayName=x-Chinese-Eten
CodePage=20003, Name=x-cp20003 ,DisplayName=x-cp20003
CodePage=20004, Name=x-cp20004 ,DisplayName=x-cp20004
CodePage=20005, Name=x-cp20005 ,DisplayName=x-cp20005
CodePage=20105, Name=x-IA5 ,DisplayName=x-IA5
CodePage=20106, Name=x-IA5-German ,DisplayName=x-IA5-German
CodePage=20107, Name=x-IA5-Swedish ,DisplayName=x-IA5-Swedish
CodePage=20108, Name=x-IA5-Norwegian ,DisplayName=x-IA5-Norwegian
CodePage=20127, Name=us-ascii ,DisplayName=US-ASCII
CodePage=20261, Name=x-cp20261 ,DisplayName=x-cp20261
CodePage=20269, Name=x-cp20269 ,DisplayName=x-cp20269
CodePage=20273, Name=IBM273 ,DisplayName=IBM273
CodePage=20277, Name=IBM277 ,DisplayName=IBM277
CodePage=20278, Name=IBM278 ,DisplayName=IBM278
CodePage=20280, Name=IBM280 ,DisplayName=IBM280
CodePage=20284, Name=IBM284 ,DisplayName=IBM284
CodePage=20285, Name=IBM285 ,DisplayName=IBM285
CodePage=20290, Name=IBM290 ,DisplayName=IBM290
CodePage=20297, Name=IBM297 ,DisplayName=IBM297
CodePage=20420, Name=IBM420 ,DisplayName=IBM420
CodePage=20423, Name=IBM423 ,DisplayName=IBM423
CodePage=20424, Name=IBM424 ,DisplayName=IBM424
CodePage=20833, Name=x-ebcdic-koreanextended ,DisplayName=x-ebcdic-koreanextended
CodePage=20838, Name=IBM-Thai ,DisplayName=IBM-Thai
CodePage=20866, Name=koi8-r ,DisplayName=koi8-r
CodePage=20871, Name=IBM871 ,DisplayName=IBM871
CodePage=20880, Name=IBM880 ,DisplayName=IBM880
CodePage=20905, Name=IBM905 ,DisplayName=IBM905
CodePage=20924, Name=IBM00924 ,DisplayName=IBM00924
CodePage=20932, Name=EUC-JP ,DisplayName=EUC-JP
CodePage=20936, Name=x-cp20936 ,DisplayName=x-cp20936
CodePage=20949, Name=x-cp20949 ,DisplayName=x-cp20949
CodePage=21025, Name=cp1025 ,DisplayName=cp1025
CodePage=21866, Name=koi8-u ,DisplayName=koi8-u
CodePage=28591, Name=iso-8859-1 ,DisplayName=Western European (ISO)
CodePage=28592, Name=iso-8859-2 ,DisplayName=iso-8859-2
CodePage=28593, Name=iso-8859-3 ,DisplayName=iso-8859-3
CodePage=28594, Name=iso-8859-4 ,DisplayName=iso-8859-4
CodePage=28595, Name=iso-8859-5 ,DisplayName=iso-8859-5
CodePage=28596, Name=iso-8859-6 ,DisplayName=iso-8859-6
CodePage=28597, Name=iso-8859-7 ,DisplayName=iso-8859-7
CodePage=28598, Name=iso-8859-8 ,DisplayName=iso-8859-8
CodePage=28599, Name=iso-8859-9 ,DisplayName=iso-8859-9
CodePage=28603, Name=iso-8859-13 ,DisplayName=iso-8859-13
CodePage=28605, Name=iso-8859-15 ,DisplayName=iso-8859-15
CodePage=29001, Name=x-Europa ,DisplayName=x-Europa
CodePage=65001, Name=utf-8 ,DisplayName=Unicode (UTF-8)
iso-2022-jpは一覧には出てこないのですが、GetEncoding(“iso-2022-jp”)を実行すると、System.Text.ISO2022Encodingが返されますので、サポートはされている模様。
なぜ、GetEncodingsで取得出来ないのだろう?