def ucs_to_utf8(cp)
def bit_window(num, msb, lsb)
ret = num
ret = ret >> lsb
ret = ret & ((1 << (msb - lsb + 1)) - 1)
end
raise if cp < 0
bytes = []
if cp < 0x80
bytes << cp
else
byte_len = 2
tmp = cp >> 11
while tmp > 0
tmp = tmp >> 5
byte_len += 1
end
raise if byte_len > 6
initbyte = 0b1111_1110
initbyte = (initbyte << (7 - byte_len)) & 0xFF
initbyte = initbyte | bit_window(cp, byte_len * 5, (byte_len - 1) * 6)
bytes << initbyte
msb = (byte_len - 1) * 6 - 1
lsb = (byte_len - 2) * 6
while lsb >= 0
bytes << (0b1000_0000 | bit_window(cp, msb, lsb))
msb -= 6
lsb -= 6
end
end
bytes.pack("C*")
end