Nic*_*ter 2 c++ utf-8 string-conversion utf-32
我有一个工作算法将UTF-8字符串转换为UTF-32字符串,但是,我必须提前为我的UTF-32字符串分配所有空间.有没有办法知道UTF-32中有多少字符会占用UTF-8字符串.
例如,UTF-8字符串"¥0"是3个字符,一旦转换为UTF-32,则是2个无符号字符.有没有办法知道转换之前我需要的UTF-32'字符数'?或者我将不得不重新编写算法?
有两个基本选项:
您可以通过UTF-8字符串进行两次传递,第一次是计算您需要生成的UTF-32字符数,第二次是将它们写入缓冲区.
分配您可能需要的最大32位字符数 - 即UTF-8字符串的长度.这浪费了内存,但意味着你可以一次性转换utf8-> utf32.
您也可以使用混合 - 例如,如果字符串短于某个阈值,则使用第二种方法,否则使用第一种方法.
对于第一种方法,第一遍看起来像这样:
size_t len=0; // warning: untested code.
for(const char *p=src; *p; ++p) {
// characters that begin with binary 10xxxxxx... are continuations; all other
// characters should begin a new utf32 char (assuming valid utf8 input)
if ((*p & 0xc0) != 0x80) ++len;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2222 次 |
| 最近记录: |