1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UTF-8 の全ての文字を取得する

Last updated at Posted at 2024-11-11

今回は UTF-8 の
全ての文字を取得する試みをします。

成果物は下記の URL からダウンロードできますが
全文字なので開くとメモリ不足になると思います。

またメモ帳が対応していない文字は
□などになると思われます。


全ての文字を取得するコード

下記のコードで全ての文字を取得できます。

全ての文字を取得するコード
StringBuilder resultString = new();

for(byte a = 33; a < 127; a++)
{
    List<byte> list = new();
    list.Add(a);
    resultString.Append(Encoding.GetEncoding("UTF-8").GetString(list.ToArray()));
}

for(byte a = 128 + 64; a < 255; a++)
{
    for (byte b = 128; b < 128 + 64; b++)
    {
        List<byte> list = new();
        list.Add(a);
        list.Add(b);

        string result = Encoding.GetEncoding("UTF-8").GetString(list.ToArray());

        if (Encoding.GetEncoding("UTF-8").GetByteCount(result) != 2)
        {
            continue;
        }

        if (1 < result.Length)
        {
            continue;
        }

        resultString.Append(result);
    }
}

for (byte a = 128 + 64; a < 255; a++)
{
    for (byte b = 128; b < 128 + 64; b++)
    {
        for (byte c = 128; c < 128 + 64; c++)
        {
            List<byte> list = new();
            list.Add(a);
            list.Add(b);
            list.Add(c);

            string result = Encoding.GetEncoding("UTF-8").GetString(list.ToArray());

            if (Encoding.GetEncoding("UTF-8").GetByteCount(result) != 3)
            {
                continue;
            }

            if (1 < result.Length)
            {
                continue;
            }

            resultString.Append(result);
        }
    }
}

for (byte a = 128 + 64; a < 255; a++)
{
    for (byte b = 128; b < 128 + 64; b++)
    {
        for (byte c = 128; c < 128 + 64; c++)
        {
            for (byte d = 128; d < 128 + 64; d++)
            {
                List<byte> list = new();
                list.Add(a);
                list.Add(b);
                list.Add(c);
                list.Add(d);

                string result = Encoding.GetEncoding("UTF-8").GetString(list.ToArray());

                if (Encoding.GetEncoding("UTF-8").GetByteCount(result) != 4)
                {
                    continue;
                }

                resultString.Append(result);
            }
        }
    }
}

// この時点の resultString.ToString() が UTF-8 の全文字です。

やっている事はシンプルで
文字の存在するであろうアドレスを
総当たりでチェックしています。

有効でない文字のチェックは
Encoding.GetEncoding("UTF-8").GetByteCount(result)
が希望するバイト数になっているかで
チェックしています。


以上 UTF-8 の
全文字を取得するコードを
考えて公開してみました。

自分の作ったアプリが
どの程度の UTF8 の文字に
対応しているかチェックする場合に
ご利用頂けると幸いです。

集計してみると
4 byte 文字以下は 2176990 文字
3 byte 文字以下は 79838 文字
2 byte 文字以下は 2014 文字
となりました。

短いですが今回はここまで。
閲覧ありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?