今回は 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 文字
となりました。
短いですが今回はここまで。
閲覧ありがとうございました。