我需要循环 utf-8 字符串并获取该字符串的每个字符。字符串中可能有不同类型的字符,例如一字节长度的数字、三字节长度的汉字等
我看了这个post https://stackoverflow.com/questions/2852895/c-iterate-or-split-utf-8-string-into-array-of-symbols#2856241它可以完成 80% 的工作,除了当字符串在 1 字节数字之前有 3 字节中文字符时,它会将数字视为也有 3 字节,并将数字打印为 1**,其中 * 是乱码。
举个例子,如果字符串是“今天星期五123”,则结果将是:
今
天
周
五
1**
2**
3**
其中 * 是乱码。但是,如果字符串是“123今天星期五”,则数字将正常打印。
上面提到的最小改编代码post https://stackoverflow.com/questions/2852895/c-iterate-or-split-utf-8-string-into-array-of-symbols#2856241复制到这里:
#include <iostream>
#include "utf8.h"
using namespace std;
int main() {
string text = "今天周五123";
char* str = (char*)text.c_str(); // utf-8 string
char* str_i = str; // string iterator
char* end = str+strlen(str)+1; // end iterator
unsigned char symbol[5] = {0,0,0,0,0};
cout << symbol << endl;
do
{
uint32_t code = utf8::next(str_i, end); // get 32 bit code of a utf-8 symbol
if (code == 0)
continue;
cout << "utf 32 code:" << code << endl;
utf8::append(code, symbol); // initialize array `symbol`
cout << symbol << endl;
}
while ( str_i < end );
return 0;
}
有人能帮我一下吗?我是 c++ 新手,虽然我检查了文档utf8 cpp http://utfcpp.sourceforge.net/#introduction,我还是不知道问题出在哪里。我认为该库是为了处理具有不同长度的 utf-8 编码的问题而创建的,所以应该有一种方法可以做到这一点......已经为此奋斗了两天......