potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

C# 8-9 ASCII、Unicode、システムのANSIエンコーディングの概要を表示する

追記20240903 現行のC# 12では$"""..."""形式で複数行の文字列補間を使用できます。このリテラル?はFormattableString型のオブジェクトとして使いまわせるので、静的関数の実装も不要です。

各種エンコーディング(ASCIIエンコーディングUnicodeエンコーディング、言語設定により指定されたシステムのANSIエンコーディング)の概要とそれを取得するサンプルコードです。

出力例

ASCIIエンコーディング
CodePage: 20127
EncodingName: US-ASCII
WebName: us-ascii
HeaderName: us-ascii
BodyName: us-ascii

Unicodeエンコーディング
CodePage: 1200
EncodingName: Unicode
WebName: utf-16
HeaderName: utf-16
BodyName: utf-16

言語設定に依存するANSIエンコーディング
CodePage: 932
EncodingName: 日本語 (シフト JIS)
WebName: shift_jis
HeaderName: iso-2022-jp
BodyName: iso-2022-jp

サンプルコード

C# 9.0(トップレベステートメント

using System;
using System.Globalization;
using System.Text;

// ASCIIエンコーディングの概要
ConsoleWriteCodePageSummary("ASCIIエンコーディング", Encoding.ASCII);
// Unicodeエンコーディングの概要
ConsoleWriteCodePageSummary("Unicodeエンコーディング", Encoding.Unicode);
// 言語設定に依存するANSIエンコーディングの概要
var ansiCodePage = CultureInfo.CurrentCulture.TextInfo.ANSICodePage;
ConsoleWriteCodePageSummary("言語設定に依存するANSIエンコーディング",
    Encoding.GetEncoding(ansiCodePage));

static void ConsoleWriteCodePageSummary(string caption, Encoding encoding)
{
    Console.WriteLine(caption);
    Console.WriteLine($"CodePage: {encoding.CodePage}");
    Console.WriteLine($"EncodingName: {encoding.EncodingName}");
    Console.WriteLine($"WebName: {encoding.WebName}");
    Console.WriteLine($"HeaderName: {encoding.HeaderName}");
    Console.WriteLine($"BodyName: {encoding.BodyName}");
    Console.WriteLine();
}

C# 8.0

using System;
using System.Globalization;
using System.Text;

class Program
{
    static void Main()
    {
        // ASCIIエンコーディングの概要
        ConsoleWriteCodePageSummary("ASCIIエンコーディング", Encoding.ASCII);
        // Unicodeエンコーディングの概要
        ConsoleWriteCodePageSummary("Unicodeエンコーディング", Encoding.Unicode);
        // 言語設定に依存するANSIエンコーディングの概要
        var ansiCodePage = CultureInfo.CurrentCulture.TextInfo.ANSICodePage;
        ConsoleWriteCodePageSummary("言語設定に依存するANSIエンコーディング",
            Encoding.GetEncoding(ansiCodePage));
    }

    static void ConsoleWriteCodePageSummary(string caption, Encoding encoding)
    {
        Console.WriteLine(caption);
        Console.WriteLine($"CodePage: {encoding.CodePage}");
        Console.WriteLine($"EncodingName: {encoding.EncodingName}");
        Console.WriteLine($"WebName: {encoding.WebName}");
        Console.WriteLine($"HeaderName: {encoding.HeaderName}");
        Console.WriteLine($"BodyName: {encoding.BodyName}");
        Console.WriteLine();
    }
}

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。