
Contents
- charmap.exe
の使いにくい点 - クエリの原型
- クエリ
2:何文字かずつ 1 行にまとめる - クエリ
3:1 文字ずつ列に分けて完成 - いろんな文字パレット例(罫線、装飾記号、数学記号、ギリシャ文字、他)
- 参考、今後
charmap.exe の使いにくい点
Windows- 文字サイズが小さく、変えられない。
- 選択中の文字だけ大きく表示されるけど、その上下左右が隠れる。(下の画像のように)
- 選択中に
Ctrl+C を押してもコビーされない。また複数の文字選択ができない。 - 文字検索できない。検索に使えるのは
Unicode コードポイントか「文字の名前」(?)だけ。 - フォントにない文字は飛ばされるので、同じ文字でもフォントによって位置が異なる。
- フォントを変えると、最初の文字に戻る。
などなど、パレットとして使いづらいこと…。下のように記号を選んだり、➀~➉の丸付き数字を入力するとか、ちょっとしたフォルダ構造の説明用に罫線文字を入力する際、charmap

そう言えば
クエリの原型
まず、ある文字を入力して、当該文字およびSELECT cp16, cp10, chr(cp10)
FROM generate_series(-5, 10) AS gs,
cast(ascii(' ★ ') + gs AS int) AS cp10,
concat('U+', upper(to_hex(cp10))) AS cp16;

クエリ中、下から
上記クエリの
SELECT cp16, cp10, chr(cp10)
FROM generate_series(0, 15) AS gs,
cast('x0020' :: bit(16) :: int + gs AS int) AS cp10,
concat('U+',
lpad(upper(to_hex(cp10)), 4, '0')) AS cp16;

以上の「ある文字
クエリ 2:何文字かずつ 1 行にまとめる
前項で得た「連続する文字」を先頭から一つの文字列にし、指定した「1WITH a (nrow, ncol, start) AS (
SELECT 10, 20, to_hex(ascii(' ● ') - 20)
), b AS (
SELECT string_agg(chr(code0 + nrow2 * ncol + ncol2), '') AS str
FROM a, cast(concat('x', start) :: bit(16) AS int) AS code0,
generate_series(0, nrow - 1) AS nrow2,
generate_series(0, ncol - 1) AS ncol2
)
SELECT (regexp_matches(str, reg, 'g'))[1]
FROM a, b, concat('.{', a.ncol, '}') AS reg;

普通のプログラミング言語なら
検索対象を、文字でなく
WITH a (nrow, ncol, start) AS (
SELECT 10, 10, '3041' -- ひらがなの先頭の16進コードポイント
), b AS (
SELECT string_agg(chr(code0 + nrow2 * ncol + ncol2), '') AS str
FROM a, cast(concat('x', start) :: bit(16) AS int) AS code0,
generate_series(0, nrow - 1) AS nrow2,
generate_series(0, ncol - 1) AS ncol2
)
SELECT (regexp_matches(str, reg, 'g'))[1]
FROM a, b, concat('.{', a.ncol, '}') AS reg;

クエリ 3:1 文字ずつ列に分けて完成
前項のクエリで「行に分ける」処理ができ、あとは各行をWITH a (nrow, ncol, start) AS (
SELECT 10, 10, to_hex(ascii(' ❶ '))
), b AS (
SELECT string_agg(chr(code0 + nrow2 * ncol + ncol2), '') AS str
FROM a, cast(concat('x', start) :: bit(16) AS int) AS code0,
generate_series(0, nrow - 1) AS nrow2,
generate_series(0, ncol - 1) AS ncol2
), c AS (
SELECT regexp_split_to_array(
(regexp_matches(str, reg, 'g'))[1], '') AS chr
FROM a, b, concat('.{', a.ncol, '}') AS reg
)
SELECT chr[1], chr[2], chr[3], chr[4], chr[5],
chr[6], chr[7], chr[8], chr[9], chr[10]
FROM c;

WITH
この出力ペインは、セル一つ・行全体・列全体・ブロックのいずれでも選択とコピーでき、他のアプリに簡単に持っていけます。また(少なくとも

いろんな文字パレット例(罫線、装飾記号、数学記号、ギリシャ文字、他)
前項のクエリから、開始文字を変えるだけで様々な文字種のパレットができます。以下、その例。コードは、変更した- 囲み英数字
- 罫線
- 小さい字の単位など
- 記号
- CJK
用の記号および分音記号 - 記号および装飾記号
- ブロック要素および幾何学模様
- 文字種記号
- 数学記号
- その他の技術用記号
- 矢印
- 全角形
- 半角形
- ギリシャ文字
- キリル文字
- 上付き
/ 下付きの文字 - その他
SELECT 10, 10, to_hex(ascii('①')) -- Unicodeカテゴリ「囲み英数字」の先頭。最初が丸数字、続いてカッコ付数字。

SELECT 10, 10, '2500' -- 罫線は「コードポイント2500」で始まり、覚えやすいかも

SELECT 10, 10, '3300' -- 「キロ」「トン」など、小さい字の単位は「コードポイント3300」から。

SELECT 10, 10, to_hex(ascii('㈠')) -- Unicodeカテゴリでいう「記号」の先頭。 -- 記号というより略号という感じ。あまり記号ぽくない

SELECT 10, 10, to_hex(ascii(' ')) -- Unicodeカテゴリ「CJK用の記号および分音記号」の先頭 -- 全角の、文章中によく使う記号。先頭はたぶん全角スペース

SELECT 10, 10, to_hex(ascii('☀')) -- Unicodeカテゴリ「記号および装飾記号」の先頭。 -- こちらは割とマーク、ワンポイント的なもの。

SELECT 10, 10, to_hex(ascii('▀')) -- Unicodeカテゴリ「ブロック要素および幾何学模様」の先頭。 -- 四角形や黒丸などは、ここ。

SELECT 10, 10, to_hex(ascii('℀')) -- Unicodeカテゴリ「文字種記号」の先頭。 -- ℃やÅ(オングストローム)など、単位はここらしい

SELECT 10, 10, to_hex(ascii('∀')) -- Unicodeカテゴリ「数学記号」のうち、+ < = > ± × ÷ 以外の先頭。 -- 上の七つのコードポイントは、これより前方の離れた所にある

SELECT 10, 10, to_hex(ascii('⌂')) -- Unicodeカテゴリ「その他の技術用記号」の先頭。 -- 対応しているフォントはまだ少ない -- MSゴシックにもほとんどの字形がないが、Macの⌘はある

SELECT 10, 10, to_hex(ascii('←')) -- Unicodeカテゴリ「矢印」の先頭。記号とは別扱いになってた

SELECT 10, 10, to_hex(ascii('!')) -- Unicodeカテゴリ「全角形」の先頭。 -- ここにも「全角記号」と言えるような字が入ってる

SELECT 10, 10, to_hex(ascii('。')) -- Unicodeカテゴリ「半角形」の先頭。 -- いわゆる半角カナはここ。

SELECT 10, 10, '0' || to_hex(ascii('ʹ')) -- Unicodeカテゴリ「ギリシャ語」の先頭。 -- 16進コードポイントが3桁なのでゼロ埋めする

SELECT 10, 10, '0' || to_hex(ascii('Ё')) -- Unicodeカテゴリ「キリル言語」の先頭。ロシア語の文字。 -- 16進コードポイントが3桁なのでゼロ埋めする

SELECT 10, 10, to_hex(ascii('⁰')) -- Unicodeカテゴリ「上付き/下付きの文字」の先頭。 -- 上付きの 1, 2, 3 だけ、コードポイントが離れている

SELECT 10, 10, '00' || to_hex(ascii(' ')) -- 最初から表示する場合、半角スペースから。

SELECT 10, 10, '00' || to_hex(ascii('A')) -- Unicodeカテゴリ「ラテン」の先頭。いわゆるアルファベット。

SELECT 10, 10, to_hex(ascii('一')) -- Unicodeカテゴリ「CJK漢字」の先頭

上のクエリ結果では「万」の前に「丆」という字がある一方、Windows

参考、今後
Unicode» 文字コードの考え方から理解する
JavaScript