2021年11月22日月曜日

波ダッシュと全角チルダの扱いに注意

波ダッシュと全角チルダの扱いに注意

概要

単純に違う文字になるので比較するときに注意しましょう

環境

  • Ruby 3.0.2p107

文字の比較と確認

irb で16進数の文字コードを確認してみます

irb(main):021:0> "〜".bytes.map {|b| b.to_s(16)}
=> ["e3", "80", "9c"]
irb(main):022:0> "~".bytes.map {|b| b.to_s(16)}
=> ["ef", "bd", "9e"]

上が波ダッシュで下が全角チルダです
見た目は一緒ですが Unicode は違うので当然比較すると false になります

irb(main):023:0> "~" == "〜"
=> false

自分が遭遇したケース

特定のサイトから取得した文字は全角チルダだったのですがそれを別のサービスの API を使ってサーバに保存し再度 GET API で取得すると波ダッシュになっていました

おそらく保存しているサーバ側では全角チルダを扱わずにすべて波ダッシュに変換して保存しているせいだと思われます

他の文字でも変換して保存している可能性がありサービス的に保存されたくない文字は変換やエスケープされている可能性があるので取り出すときに注意しましょう

0 件のコメント:

コメントを投稿