謎の英数字ツイートの意味を解説する
フォロワーのちぃさんからこんな質問を頂きました。
If nothing is displayed above this, "Tweet ID:1202218364971565062" has been deleted.
私も以下のような似た遊びをしたことがあるのですよ。 このような数値の羅列は大抵何かしらの文字コードですからね。
If nothing is displayed above this, "Tweet ID:1126054814842933248" has been deleted.
ちなみに知識としては『ほぼ独学』です。 勉強するなら以下の書籍が大変役に立ちました。 オススメです。
というわけで今回の記事は以上です。 ありがとうございました(';')
どうやってコンピュータは文字を表現しているか
と、終わってしまったら元も子もないので、一緒にちぃさんがなんて言っていたか解読しましょうね。
さて、解読する前に、世間一般の人から見たらバグったように見える彼女のツイートは何なのかについて簡単に説明しましょう。 かなり端折って説明するので
という広い心で読んでください。
まず、コンピュータは文字も画像も何もかも『0 or 1』で表現します。 したがって今読んでいるこの文字も、実は0と1で表現されているのです。 これをビットパターンと呼び、コンピュータが扱うことができる最小単位(bit)です。
コンピュータは0と1だけで表現すると都合いいんですけど、人間側は0と1だけじゃ困るんです。 おっぱいを0と1で表現したと言われたって困るじゃないですか。
というわけで、0と1を使って数字や文字、色や音を表現できるようにするのです。 今回は数字と文字について勉強してみましょう。
1bitは1と0を表現できますが、2以上の表現はどうすべきか。 2bit用意して10と表現(繰り上げ)します。3なら11です。 どっかで聞いたことがあることであるはずの2進数というものです。
2bitあれば数字の3まで表現できました。 こんな感じで表現したい数字、文字、英語の大文字小文字や特殊記号と増やして、最終的に通信することも考えると8bit必要になりました。
これが8bit = 1バイト(byte)です。 『0000 0000 ~ 1111 1111』で表現するのがコンピュータの仕組みで一般化されました。
ここまでいくと流石に桁数が大きくなってきて、2進数を読み取るのはだりぃよ……と人間側は思うわけです。
というわけで2進数を使うコンピュータと相性が良く、人間が読みやすい形式の16進数という表現が誕生しました。 『1111 1111』 ⇒ 『FF』のように変換することですね。
こうして人間はコンピュータで数字や文字を表現できる幅を広げていきました。 しかし、表現方法が統一されていない時代があったのです。 極端な例ですが、0000をaにする人がいたりbにする人がいて困るわけです。
そこでこの状態を解決するために米国規格協会が『米国標準交換コード(American Standard Code for Information Interchange)』という基準を採用しました。
これを『ASCII(アスキー)』と呼び、コンピュータのビットパターンからテキストを表現する文字コードの1つとして誕生しました。 ここまで長い説明でしたが、冒頭のちぃさんはアスキー表現で文字をツイートしていたということなんです。
答え合わせ
というわけで彼女がなんて呟いたか変換してみましょう。 やり方は簡単です。 変換表を見て文字に置き換えればいいのです!
さぁ頑張って下さい!……といっても死ぬほどめんどくさいので、素直に変換してくれるサイトを使いましょう。
で、変換した結果が以下です。
【変換前】 57 68 79 20 77 6f 75 6c 64 20 79 6f 75 20 66 69 6e 64 20 6f 75 74 20 77 68 61 74 20 74 68 69 73 20 66 6f 72 6d 20 69 73 20 41 53 43 49 49 20 63 6f 64 65 3f 48 61 76 65 20 79 6f 75 20 65 76 65 72 20 73 74 75 64 69 65 64 20 74 68 69 73 3f【変換後】 Why would you find out what this form is ASCII code? Have you ever studied this?
【翻訳】 貴様、なぜASCIIであることがわかった?
良ければこの記事のサムネ画像もなんて書いてあるか調べてみてください。 **※ちなみに冒頭で紹介した私のツイートはASCIIで変換されていません。気になる方はUTF-8をで変換してみてください。 **