yotiky Tech Blog

とあるエンジニアの備忘録

.NET Core で Shift-JIS エンコードを扱う

目次

検証環境

  • .NET Core 3.1
  • System.Text.Encoding.CodePages 5.0.0

実装

NuGet で System.Text.Encoding.CodePages をインストールする。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

var enc = Encoding.GetEncoding("Shift_JIS");

補足

Encoding.Default

Encoding.Default でシステムのデフォルトエンコーディングを取得できるが、.NET Framework .NET Core 以降では値が変わる。

.NET Framework では Shift_JIS であったが、 .NET Core では UTF-8 となる。

docs.microsoft.com

UTF-8

Encoding.UTF8 で取得する Encoding は BOM 付きとなる。

new UTF8Encoding() で引数 encoderShouldEmitUTF8Identifierfalse を設定した場合は BOM なしとなる。デフォルトが false のため、引数なしで初期化しても同様である。

Encoding.Default で取得する UTF-8Encoding は BOM なしである。

StreamWriter でそれぞれのエンコードを指定して書き出した時のバイト列は次の通り。 「EF-BB-BF-」がBOMの部分。

f:id:yotiky:20210309043457p:plain

Encoding.Default
E3-83-91-E3-83-B3-E3-81-AE-E8-80-B3

Encoding.UTF8
EF-BB-BF-E3-83-91-E3-83-B3-E3-81-AE-E8-80-B3-0D-0A

UTF8Encoding(encoderShouldEmitUTF8Identifier:false)
E3-83-91-E3-83-B3-E3-81-AE-E8-80-B3-0D-0A

docs.microsoft.com

参考