[scala | java] サロゲートペア文字列を排除する

サロゲートペアとは

Unicode文字は通常2byte(16bit)(2^16=65536種類の文字)で表されるが、
扱いたい文字が増え続けた結果、2^16の範囲を超えて、文字表現が
必要になりました。

その需要に対応するために、今まで未使用だった
0xD800~0xDBFF(1024種,上位サロゲート)と0xDC00~0xDFFF(1024種、下位サロゲート)
を組み合わせて新たに定義された文字のことです。

サロゲートペアは上位と下位のペアで表されるため、4byteとなります。

サロゲートペアだけを排除したい

利用しているmysqlの文字コードの関係で、サーバに送信する文字列から
サロゲートペアのみを排除したい事情がありました。

クライアントからの入力をWEBサーバが受け付けて、内部的に
サロゲートペアを排除してから、DBサーバに格納という流れが必要でした。

以下コード

他にも色々方法あるんだけど、とりあえずこれを採用しました。

1文字ずつ文字を文字コードの数値に変換して、0xFFFF(2byteの上限)と比較して
それ以上ならStringBuilderのインスタンスに、文字を追加しないようにしています。

参考リンク

読むのめんどくさくなるくらい長くて、小難しいかもしれないけどIBMの
記事は詳細まで検証されてて勉強になりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です