This is a C89 UTF-8 library, with an API compatible with that of Plan 9's libutf, but with a number of improvements:
- Support for runes beyond the Basic Multilingual Plane.
utflenandutfnlencannot overflow on 32- or 64-bit machines.chartorunetreats all invalid codepoints as thoughRuneerror.fullrune,utfecpy, andutfnlendo not overestimate the length of malformed runes.- An extra function,
charntorune(p,s,n), equivalent tofullrune(s,n) ? chartorune(p,s) : 0. Runeerrormay be set to an alternative replacement value, such as -1, to be used instead of U+FFFD.
Differences to be aware of:
UTFmaxis 6, thoughrunetocharwill never write more than 4 bytes. Plan 9'sUTFmaxis 3.chartorunemay consume multiple bytes for each illegal rune. Plan 9 always consumes 1.runelenandrunetocharreturn 0 if the rune is too large to print. Plan 9 erroneously returnsUTFmax.