Web技術勉強会 第34回

1,328 views

Published on

Web技術勉強会 第34回

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,328
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Web技術勉強会 第34回

  1. 1. Web技術勉強会 第34回 文字コードについて Ryuichi TANAKA. Blog: http://blog.livedoor.jp/mapserver2007/ Twitter: @mapserver2007
  2. 2. UTF-8とUTF-16とUnicode
  3. 3. 全部別物
  4. 4. この際勉強しよう!
  5. 5. 発端 文字コードは複雑 Unicodeって何?UTF-8とは違う?
  6. 6. 用語の確認 UCS(UCS-4) Universal Character Set コードテーブルは0~0x7FFFFFFF(約21億 文字分) 1文字あたり4バイトを使用することから UCS-4とも呼ばれる文字集合
  7. 7. 用語の確認 UCS-2 0~0xFFFF(65535文字分) 16ビット以上の範囲の文字は扱えない
  8. 8. 用語の確認 Unicode UCSの0~0x10FFFF(約111万文字分)を使 用 UCSとUnicodeは策定しているグループが 違うが、UCSとUnicodeは同じ意味で扱わ れることがある
  9. 9. 用語の確認 Unicode Unicodeは元々16ビットですべての文字を 表そうとしたのが始まり。 無理にきまってんだろjk これだからシングルバイト圏の人間は。
  10. 10. 用語の確認 Unicode 現在ではUnicodeは1文字4バイトで表現さ れる 1文字4バイトはUCS(UCS-4)と同じだが、 使用範囲が限定されている Unicodeは00群0F面まで 定義上の最大は127群255面まで
  11. 11. 用語の確認 UTF-16 UCS-2にサロゲートペアを併用した符号法 元々は16ビットの固定長の符号 サロゲートペアを併用することで大幅に使 用範囲が増えた
  12. 12. 用語の確認 UTF-16 UTF-16ではファイルの先頭にBOMをつけ る UTF-16ではUCS-2の範囲外の文字 (=UCS-4から持ってくる)のうち、 0x10000~0x10FFFFをサロゲートペアとし て表す
  13. 13. 用語の確認 サロゲートペア UTF-16で採用されたUnicodeの符号化法 の一つ サロゲート文字(≠サロゲートペア)として上 位、下位それぞれ1024文字割り当てている
  14. 14. 用語の確認 サロゲートペア 16ビットUnicodeの未定義領域の1024文字 を2つ使用する 上位サロゲートは0xD800~0xDBFF 下位サロゲートは0xDC00~0xDFFF これらを組み合わせたものをサロゲートペ アと呼ぶ
  15. 15. 用語の確認 サロゲートペア 1024x1024=1048576文字を256x256の面 (Plane)に分割、16面+BMP(Basic Multilngual Plane=基本多言語面=最もよく 使う基本的な文字・記号がほぼすべて含ま れる領域=0x0000~0xFFFF)の計17面、約 111万文字が使用可能になる
  16. 16. 用語の確認 BOM Byte Order Mark UTF-16(UTF-8にもつけられる)の先頭に つけるU+FEFE(0xFEFE)のこと UTF-8ではEF BB BF BOMがつくとリトルエンディアン BOMがつかないとビッグエンディアン
  17. 17. 用語の確認 UTF-8 1文字を1~6バイトの可変長バイト列で表 現する符号法 サロゲートペアを用いない 広大な範囲を持つが、現在の標準仕様 (RFC3629)では使用範囲が0~0x10FFFF のみに規定されている
  18. 18. 用語の確認 UTF-8 BOMがつけれれる BOMをつけたUTF-8はUTF-8Nと表記 しかし、国際的には認められていない 使われるのは国内のみ
  19. 19. まとめると範囲は UCS-2⊆UTF-16⊆UTF-8(現行) ⊆(UCS-4⊆真のUTF-8)
  20. 20. これだけ分かれてる。 ややこしいんじゃぼけー
  21. 21. 直近、俺らが困りそうなこと
  22. 22. サロゲートペア問題
  23. 23. サロゲートペア問題 サロゲートペア領域とUTF-16のデフォルト領 域はビット数が違う UTF-16のデフォルト:16ビット サロゲートペア領域:32ビット
  24. 24. つまり、デフォのUTF-16領域にある文字列は「2バイト」、サロ ゲートペア文字は「4バイト」になる。 これは実に重大な問題を引き起こすので無視できない。 特にWebアプリで。
  25. 25. <html> <head> <script> function length(e) { alert(e); alert(e.length); } </script> </head> <body> <input type="button" onclick="length('u3042');" value="あ"/> <input type="button" onclick="length('u20B9F');" value="𠮟"/> </body> </html>
  26. 26. あら不思議。 「あ」は1文字扱いなのに 「叱」は2文字扱いになっちゃった
  27. 27. これがサロゲートペアを扱う時の問題点。
  28. 28. 例えば、ユーザの入力文字を「文字数」でバリデーションす るとき。パスワードは最低8文字以上にしないと弾くという処 理を書いたとき。
  29. 29. 入力フォームにサロゲートペア文字を含んでいる場合…。単に length取っただけだと、あっさり8文字以下でも突破できちゃう。 それをそのままDBに突っ込んだ日にゃ。 もうめちゃくちゃ。
  30. 30. やっつけまとめ ・文字コード(特にUnicode関係)はわかりにくすぎる ・定義が曖昧(UCSとUnicodeの解釈が人によって違うとか) ・とりあえずサロゲートペアには気をつけろ。 ・対策方法は そこら中にあるからそれを参考に!

×