В моем коде C++ мне нужно преобразовать строки Unicode в строки UTF-8 с помощью iconv(). Перед вызовом функции мне нужно выделить правильный размер буфера. Несколько примеров, которые я видел, перекрывают буфер (например, в два раза больше длины входной строки). Мне интересно, есть ли способ определить точный размер, который потребуется для преобразования. С уважением.
По сути, вы хотите сделать две вещи:
Я предполагаю, что вы знаете, как сделать первый шаг, и сосредоточьтесь на втором шаге:
* UTF-8 может кодировать 2147483648 кодовых точек [0... 0x7FFFFFFF], но UTF-16 может кодировать только первые 1114112 из них [0... 0x10FFFF], которые являются единственными, которые в настоящее время обозначены. В результате все, что находится за пределами U + 10FFFF, бессмысленно на момент написания этой статьи. Я включил остальных только для полноты.