缩短中文字符串以适应字符数组C++



我正在尝试将拼音字符串放入字符数组中。 例如,如果我有如下所示的拼音字符串。

string str = "转换汉字为拼音音"; // needs at least 25 bytes to store 
char destination[22];
strncpy(destination, str.c_str(), 20);
destination[21] = ''; 

由于中文字符需要 3 个字节,我可以做 strncpy(destination, str.c_str((, (20/3(*3(; 但是如果 str 包含中文以外的任何字符(在 utf8 编码中需要 2 个字节的 4 个字节(,这个逻辑将填充。 后来如果我尝试将目的地转换为打印拼音字符,则只有前 6 个中文字符正确打印,2 个字节以十六进制打印。 有什么方法,我可以在复制到目标之前缩短字符串,以便在打印目标时打印正确的中文字符(没有任何单独的十六进制字节(?使用 POCO::Textendcoing 还是 POCO::UTF8 编码类?

提前谢谢。

除了创建自己的文本编码方式之外,没有什么是可行的。但即使在这种情况下,您也必须创建 25 个字符(不要忘记末尾为零!(数组来存储末尾的字符串才能正确打印,除非您创建自己的打印例程。

即所需的工作量并不能平衡额外 3 个字节的胜利。 请注意,该代码实际上是 C。在C++中,您不使用这种风格的代码。

最新更新