【发布时间】:2014-05-26 19:08:10
【问题描述】:
在我的 C++ 代码中,我需要使用 iconv() 将 Unicode 字符串转换为 UTF-8 字符串。在调用该函数之前,我需要分配适当的缓冲区大小。我见过的几个示例过度分配缓冲区(例如,输入字符串长度的两倍)。我想知道是否有办法确定转换所需的确切大小。问候。
【问题讨论】:
在我的 C++ 代码中,我需要使用 iconv() 将 Unicode 字符串转换为 UTF-8 字符串。在调用该函数之前,我需要分配适当的缓冲区大小。我见过的几个示例过度分配缓冲区(例如,输入字符串长度的两倍)。我想知道是否有办法确定转换所需的确切大小。问候。
【问题讨论】:
基本上你想做两件事:
我假设您已经了解如何进行第一步,并将专注于第二步:
* UTF-8 可以编码 2147483648 个代码点 [0...0x7FFFFFFF],但 UTF-16 只能编码其中的前 1114112 个 [0...0x10FFFF],这是目前唯一指定的。因此,在撰写本文时,超出 U+10FFFF 的任何内容都毫无意义。我将其他人包括在内只是为了完整。
【讨论】: