Upgrade to Pro — share decks privately, control downloads, hide ads and more …

文字ってなんだろう?身近だけど意外と知らない文字コードと絵文字の話 - 技育 CAMP 2021

文字ってなんだろう?身近だけど意外と知らない文字コードと絵文字の話 - 技育 CAMP 2021

Naoki Ikeguchi

September 24, 2021
Tweet

More Decks by Naoki Ikeguchi

Other Decks in Programming

Transcript

  1. $ whoami • 池口 直希 Naoki Ikeguchi a.k.a. しけちあ Siketyan

    • 21 卒 退 サーバサイドエンジニア • 元・豊田高専生 (愛知) #kosen18s • 愛知県江南市 出身 • 東京都北区 在住 https://s6n.jp/ Twitter: @s6n_jp 2 ❌
  2. 4

  3. 6

  4. 8

  5. 9

  6. ASCII (American Standard Code for Information Interchange) • アルファベット・数字・一部の記号を定義した最も基本的な 文字コードとして使われている

    • 1 文字を 7 ビットで表現することができ, 128 文字が定義される • バイトは 8 ビットだが先頭 1 ビットを誤り検出に使われていたことから • ほとんどの文字コードは ASCII を拡張する形で作られている • ASCII で定義された部分の文字はほとんどの文字コードで使える • もちろん日本語の仮名や漢字は定義されていない 10
  7. Shift_JIS (windows-31j, CP932) • エスケープシーケンスなしで ASCII と日本語を共存する • 特定のアルゴリズムで ASCII

    の未使用領域になるよう変換 12 文字 A 漢 C 16進 41 8A BE 43 ASCII は 0x7F までしか定義されない ので 0x8A と 0xBE は未定義領域
  8. UTF-8 • Unicode 文字セットを使ってバイト列にするための文字コード • ASCII 部分は 1 バイト, それ以外は

    2~4 バイトで表現する • 現在最も広く使われている 13 文字 A B C 漢 字 16進 41 42 43 E6 BC A2 E5 AD 97
  9. Unicode • 世界の多くの言語に対応した文字の集合 • The Unicode Consortium (現 Unicode Inc.)

    によって定義される • Unicode v14.0 現在 284,344 文字が収録済み • 定義されたコードポイントは 144,697 個 • コードポイントとこの数の乖離については後述 • 最大 1,114,112 文字まで定義できる 14
  10. 22

  11. 27 .len() == 2 * 4 + 3 == 11

    .chars() == 4 + 3 == 7
  12. References • Twemoji https://twemoji.twitter.com/ • 文字列でUTF-8でエンコードされたテキストを保持する The Rust Programming Language

    日本語版 より https://doc.rust-jp.rs/book-ja/ch08-02-strings.html • Unicode® Version 14.0 Character Counts https://www.unicode.org/versions/stats/charcountv14_0.html • Japanese Character Encoding for Internet Messages (RFC1468) https://datatracker.ietf.org/doc/html/rfc1468 28