let utf8_char_of_code n =
if n < 128 then
String.make 1 (Char.chr n)
else
let z_mask = 0b00111111 in
let z_part = (n land z_mask) in
let z = 0b10000000 lor z_part in
if n <= 0x0007FF then
let y_mask = 0b0000011111000000 in
let y_part = (n land y_mask) lsr 6 in
let y = 0b11000000 lor y_part in
Printf.sprintf "%c%c" (Char.chr y) (Char.chr z)
else
let y_mask = 0b111111000000 in
let y_part = (n land y_mask) lsr 6 in
let y = 0b10000000 lor y_part in
if n <= 0x00FFFF then
let x_mask = 0b1111 lsl 12 in
let x_part = (n land x_mask) lsr 12 in
let x = 0b11100000 lor x_part in
Printf.sprintf "%c%c%c" (Char.chr x) (Char.chr y) (Char.chr z)
else
if n <= 0x10FFFF then
let x_mask = 0b111111 lsl 12 in
let x_part = (n land x_mask) lsr 12 in
let x = 0b10000000 lor x_part in
let w_mask = 0b111 lsl 18 in
let w_part = (n land w_mask) lsr 18 in
let w = 0b11110000 lor w_part in
Printf.sprintf "%c%c%c%c" (Char.chr w) (Char.chr x) (Char.chr y) (Char.chr z)
else
failwith (Printf.sprintf "UTF-8 code out of range: %x" n)