Closed5
おそるべき絵文字
ピン留めされたアイテム
自ブログの記事でもう少し真面目に書いてるので参考にどうぞ。
Zenn 記事投稿時にちょっと気になることがあって issue を投げたのだが
じゃあ,どこからどこまでが「絵文字」なんだろうと気になってちょっと調べてみた。
情報歓迎
まずは Wikipedia を起点にするのがいいのかな,と思ったが
なんか *
とか 0
とかの記号・数字まで絵文字とか言ってくさる。えー?
こういうときはご本家に聞いてみよう。
これを見ると,絵文字 #️⃣ は
Unicode Point | 字形 | Unicode 名称 |
---|---|---|
U+0023 | # |
NUMBER SIGN |
U+FE0F | VARIATION SELECTOR-16 | |
U+20E3 | ⃣ |
COMBINING ENCLOSING KEYCAP |
という合成列らしい。えー。絵文字異体字セレクタの後ろに更に結合文字が付くのかよ。しかも基底文字はただの半角記号だよ orz
これはヤバい匂いしかしない。興味本位で手を出していい案件じゃなかった!!
おそるべき絵文字の深淵を垣間見てしまったわけだが,これで思い出した記事がある。
まぁ「技術的負債」と口走ったのは私の黒歴史としてスルーしていただけるとありがたいが,よく考えたら「㍻ U+337B」とかを「文字」だと思うから不合理に感じるのであって「絵文字」と思えばアリなのか。
ちなみに,先日本家ブログで書いた
で紹介した方法で確認してみたら「㍻ U+337B」は "Symbol/other" に分類されるようだ。つまり(絵文字ではないが)絵文字と同等ということ。
ちなみに,今回 Go で大雑把な文字種のチェックを行うのに以下の関数を書いてみた。
import "unicode"
func check(r rune) string {
switch {
case unicode.Is(unicode.Variation_Selector, r):
return "Variation Selector"
case unicode.Is(unicode.Sc, r):
return "Symbol/currency"
case unicode.Is(unicode.Sk, r):
return "Symbol/modifier"
case unicode.Is(unicode.Sm, r):
return "Symbol/math"
case unicode.Is(unicode.So, r):
return "Symbol/other"
case unicode.Is(unicode.Lm, r):
return "Letter/modifier"
case unicode.Is(unicode.Lo, r):
return "Letter/other"
case unicode.Is(unicode.Nl, r):
return "Number/letter"
case unicode.Is(unicode.No, r):
return "Number/other"
case unicode.Is(unicode.Mc, r):
return "Mark/spacing combining"
case unicode.Is(unicode.Me, r):
return "Mark/enclosing"
case unicode.Is(unicode.Mn, r):
return "Mark/nonspacing"
case unicode.Is(unicode.Pc, r):
return "Punctuation/connector"
case unicode.Is(unicode.Pd, r):
return "Punctuation/dash"
case unicode.Is(unicode.Pe, r):
return "Punctuation/close"
case unicode.Is(unicode.Pf, r):
return "Punctuation/final quote"
case unicode.Is(unicode.Pi, r):
return "Punctuation/initial quote"
case unicode.Is(unicode.Ps, r):
return "Punctuation/open"
case unicode.Is(unicode.Po, r):
return "Punctuation/other"
case unicode.Is(unicode.Zl, r):
return "Separator/line"
case unicode.Is(unicode.Zp, r):
return "Separator/paragraph"
case unicode.Is(unicode.Zs, r):
return "Separator/space"
case unicode.IsGraphic(r):
return "Graphic"
case unicode.Is(unicode.Join_Control, r):
return "Join Control"
case unicode.Is(unicode.Cc, r):
return "Control/control"
case unicode.Is(unicode.Cf, r):
return "Control/format"
case unicode.Is(unicode.Cs, r):
return "Control/surrogate"
case unicode.Is(unicode.Co, r):
return "Control/private use"
}
return "Unknown"
}
長いコードで恐縮だが,ちょこっと文字種を調べるのには使えるだろう。
このスクラップは2021/02/22にクローズされました