文字コードの簡単な勉強
文字コード再入門 ─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!
【図解】【3分解説】UnicodeとUTF-8の違い!【今さら聞けない】
バイト順マーク
ざっくりいうと
- Unicodeはあらゆる文字を何でも頑張って16ビットで何でも表現(コードポイントと呼ぶ)しようとしたよ。
- でも、足りなかったよ。なので、2文字分(32ビット)で忖度することにして、こっちに突入するものをサロゲートペアと呼ぶよ。
- Unicodeを符号変換する方法にはUTF-16、UTF-32、UTF-8があるよ。
- この辺を見分けるためにBOMという決め事で自己紹介できるよ。
- ただし、UTF-8でBOM有無を判別しないソフトウェアもあったりするので気をつけてね。
ググると、日本では俗に「外字」と言われる範囲がそれに当たります。
𠮷野家とか。
Javaでの落とし穴?
文字列長
String#length
だと、Unicode(UTF-16)換算の長さになる。String#codePoints
だと、実際の文字の長さ(コードポイントの個数)になる
|
|
Bean Validator
@Length
, @Size
共に、Unicode単位。@CodePointLength
を使いましょう。
※ 日本人がコントリビュートしてくれてる。