mastodon.zunda.ninja is one of the many independent Mastodon servers you can use to participate in the fediverse.
Zundon is a single user instance as home of @zundan as well as a test bed for changes of the code.

Administered by:

Server stats:

1
active users

zunda

𠮷野家さんはUTF-16で4文字わよ

$ ruby -e 'puts "𠮷野家".encode("UTF-8").size'
3
$ ruby -e 'puts "𠮷野家".encode("UTF-16").size'
4

@zundan 正確には4コードユニットでしょうか。というのは置いておいて最近のRubyだと10が返ってくるみたいですね

@shugo 不正確な書き方になっているのは某Salesforceのデータベースへの不満の表れなので置いておいて、ほんとうだ! 3.4.2でUTF-16に対しては10が返りますね。BOMと4コードユニットそれぞれ2バイトずつ合計10バイトでしょうか。UTF-8では3のままなのに対してちょっと非直感的に感じてしまいます。

$ ruby -e 'puts RUBY_VERSION;x="𠮷野家";[8,16].each{puts x.encode("UTF-#{it}").s
ize}'
3.4.2
3
10

@zundan UTF-16はダミーエンコーディングなので、中途半端にコードユニットに対応するよりバイト列扱いにしたんですかねえ

@shugo なるほどなるほど。Encoding::UTF_16BEやEncoding::UTF_16LEでencodeした場合にはsizeは3になるようです。UTF-16でサロゲートペアになる文字を簡単に知ることができて便利だったのですが、他の方法を探しますw

@zundan Ruby 3.1以前だと"吉村家".encode("UTF-16").sizeも4になるので𠮷を2と数えているのではなくてBOMも数えているのかもしれません。コードユニット数を数えるのは.encode("UTF-16LE").bytesize / 2でよさそうな気がします

@shugo おわー。僕はずーっと勘違いしてましたね。ありがとうございます!