I found a solution inspired from: Create UTF-16 string from char*Create UTF-16 string from char*
size_t uint8_t_UTF_16(uint8_t *input, uint8_t *output, size_t inlen) { size_t outlen = 0.0; for (size_t i = 0; i < inlen; i++) { if (isascii(input[i])) { output[i] = 0; output[i + 1] = input[i / 2]; i++; outlen += 2; } else { output[i] = input[i]; outlen += 0.5; } } return outlen; } It does work but I'm not sure that this solution is safe.