_ UTF-32からUTF-16とUTF-8を作る ちょっと調べる必要があったので、作った。(追記:タイトルは嘘ですね。2バイトを越えた——素のUTF-16で表現できない文字の変換) #!/usr/local/bin/ruby if ARGV.length != 1 STDERR.puts 'usage: ruby u.rb 0xコード' exit 1 end ch = ARGV[0].to_i(16) u = ch - 0x10000 u0 = u >> 10 | 0xd800 u1 = u & 0x3ff | 0xdc00 printf "surrogate pair = \\u%04x \\u%04x\n", u0, u1 u = [18, 12, 6, 0].inject([]) do |r, x| r << (ch >> x & 0x3f | 0x80) end u[0] |=