我试着理解如何在C++中处理基本的UTF-8操作.
假设我们有这样的场景:用户输入一个名称,它被限制为10个字母(用户语言中的符号,而不是字节),它被存储.
它可以用ASCII方式完成.
// ASCII
char * input; // user's input
char buf[11] // 10 letters + zero
snprintf(buf,11,"%s",input); buf[10]=0;
int len= strlen(buf); // return 10 (correct)
Run Code Online (Sandbox Code Playgroud)
现在,如何在UTF-8中完成它?我们假设它最多4个字节的字符集(就像中文).
// UTF-8
char * input; // user's input
char buf[41] // 10 letters * 4 bytes + zero
snprintf(buf,41,"%s",input); //?? makes no sense, it limits by number of bytes not letters
int len= strlen(buf); // return number of bytes not letters (incorrect)
Run Code Online (Sandbox Code Playgroud)
可以用标准的sprintf/strlen完成吗?是否有任何替换这些函数与UTF-8一起使用(在PHP中有这样的函数IIRC的mb_前缀)?如果没有,我是否需要自己写这些?或者我可能需要以另一种方式接近它吗?
注意:我宁愿避免宽字符解决方案......
编辑:我们只限于基本多语言平面.