u := uint32(r & 0x7FFFFFFF)
if (u >= 0xD800 && u <= 0xDFFF) || u > 0x10FFFF { return append(p, 0xEF, 0xBF, 0xBD) }
switch {
case u <= 0x7F:
return append(p, byte(u & 0x7F))
case u <= 0x7FF:
return append(p,
0xC0 | uint8((u >> 6) & 0x1F),
0x80 | uint8( u & 0x3F))
case u <= 0xFFFF:
return append(p,
0xE0 | uint8((u >> 12) & 0x0F),
0x80 | uint8((u >> 6) & 0x3F),
0x80 | uint8( u & 0x3F))
default:
return append(p,
0xF0 | uint8((u >> 18) & 0x07),
0x80 | uint8((u >> 12) & 0x3F),
0x80 | uint8((u >> 6) & 0x3F),
0x80 | uint8( u & 0x3F))
}
}