概要
Twitterにおける有名なサービスの一つに、「午前3時の茨城県」というものがあります。
これは、午前3時に「午前3時の茨城県」という文字列をツイートするだけ……のものなのですが、何故か他の「文字」も付随した代物なことから、各種Twitterクライアントを悩ませています。要するに、ごちゃごちゃしすぎてきちんと表示できていないのですね。というわけで、その原因、および本来表示されるべき姿を探ってみました。
※元ネタは恐らく「午前3時の無法地帯」だと思われますが詳細は不明です。
現時点での表示結果
文字データの内容
えっと、「午̷̖̺͈̆͛͝前̧̢̖̫̊3̘̦時̗͡の̶̛̘̙̤̙̌̉͢い̷゙̊̈̓̓̅ば̬̬̩͈̊͡ら゙̜̩̹ぎ̫̺̓ͣ̕͡げ̧̛̩̞̽ん゙̨̼̗̤̂̄」です。……え、文字化けして読めない?
そんな場合のためにRubyスクリプトで完璧に再現してみました。ご査収ください。
# 「午」+ダイアクリティカルマーク×7
print "\u{5348 0316 0306 0337 033A 0348 035D 035B}"
# 「前」+ダイアクリティカルマーク×5
print "\u{524D 030A 0316 032B 0327 0322}"
# 「3」+ダイアクリティカルマーク×2
print "\u{0033 0318 0326}"
# 「時」+ダイアクリティカルマーク×2
print "\u{6642 0317 0361}"
# 「の」+ダイアクリティカルマーク×9
print "\u{306E 0318 031B 0319 0336 0324 0319 030C 0309 0362}"
# 「い」
print "\u{3044}"
# 半角濁点+ダイアクリティカルマーク×6
print "\u{3099 030A 0308 0337 0343 0343 0305}"
# 「ば」+ダイアクリティカルマーク×6
print "\u{3070 030A 032C 032C 0329 0348 0361}"
# 「ら」+ダイアクリティカルマーク×7
print "\u{3089}"
# 半角濁点+ダイアクリティカルマーク×3
print "\u{3099 031C 0329 0339}"
# 「ぎ」+ダイアクリティカルマーク×6
print "\u{304E 032B 033A 0315 0313 0363 0361}"
# 「げ」+ダイアクリティカルマーク×5
print "\u{3052 0327 0329 031B 031E 033D}"
# 「ん」
print "\u{3093}"
# 半角濁点+ダイアクリティカルマーク×6
puts "\u{3099 033C 0317 0302 0304 0324 0328}"
……実は、Unicodeの文字列を解析するサイトのデータを利用しただけなんですけれどね。
ソースコメントで連発されている**ダイアクリティカルマークとは、アクセントやウムラウトのように「文字の上や下などに付ける(合成する)ための文字」という意味です。これを使えば、「濁音がない平仮名に濁点を無理やり付ける」といったことも可能になり、結果として上記画像のようなゴチャゴチャした表示にできるのです。
午前3時の茨城県について書かれた昔の記事では、「スマホのツイッターアプリで見ると、『午前3時のい゙ばら゙ぎげん゙』というように表示されます」とあるのですが、これは要するに昔のスマホ用公式Twitterクライアントはダイアクリティカルマークを無視していたということ(今では上記のように無視されず表示されます)。言うなれば、「午前3時の茨城県」はUnicode表示のベンチマーク**なのです。
まとめ
あの「午前3時の茨城県」は、実のところ『午前3時のい゙ばら゙ぎげん゙』にダイアクリティカルマークを57個もつけた結果生まれた産物でした。表示できるかはTwitterクライアントに強く依存しますが、実際のところ手打ちでダイアクリティカルマークを入れる変態などいないので気にすることはないです。