文字コード順でのソートはやっぱだめだ

文字コード順でソートして表示しているところがあって、「第一グループ」「第二グループ」「第三グループ」というレコードを表示すると、「第一」「第三」「第二」という順で並んだ。
一応確認のためのプログラムを作って、

# -*- encoding: Windows-31J -*-

ary = %w[一 二 三]

puts "■Shift_JIS"
ary.each do |moji|
  puts "#{moji} : #{[].tap{|a| moji.bytes.each{|b| a << b}}.join(" ")}"
end

puts "■UTF-8"
ary.each do |moji|
  puts "#{moji} : #{[].tap{|a| moji.encode('UTF-8').bytes.each{|b| a << b}}.join(" ")}"
end

実行してみたところ、

Shift_JIS
一 : 136 234
二 : 147 241
三 : 142 79
UTF-8
一 : 228 184 128
二 : 228 186 140
三 : 228 184 137

となった。
2つとも三が二より先になっていますね。
とはいえ、普通の人が見たら、バグじゃないか?って思いますよね。やっぱ文字コード順のソートはだめだと改めて強く思うのでありました。