我正在开发一个基本的手工编码词汇扫描器,并希望支持 UTF-8 输入(它不再是 1970 年了!)。stdin一次从一个文件中读取输入字符,然后将其推入缓冲区,直到看到空格等。我考虑为此编写自己的包装器fgetc(),而不是返回char[]构成 UTF-8 字符并与结果作为一个字符串......这很容易,但会变成一个滑坡。我不想浪费时间重新发明轮子,而是使用现有的、经过测试的库,如ICU。所以现在我有一个非 UTF-8 支持代码,它适用于fgetc(), isspace(),strcmp()等,我正在尝试更新以使用 ICU。这是我第一次尝试 ICU,并且一直在阅读文档并尝试使用 Google 代码搜索查找使用示例,但仍然存在一些混淆点,我希望有人能够澄清。
该u_fgetc()函数返回UChar,并u_fgetcx()返回UChar32......文档建议使用u_fgetcx()来读取代码点,所以这就是我开始的内容。我保持与上面相同的方法,但我将UChar32s 推入缓冲区而不是chars。
将字符与已知值进行比较的正确方法是什么?最初我能够
if (c == '+')检查是否从输入中获取了加号。GCC 不会抱怨什么时候c是 aUChar32(然后是和之间的比较UChar32)char,但这真的合适吗?我可以用来
strcmp()将缓冲的字符与已知值进行比较,例如if ((strcmp(buf, "else") == 0). ICU提供u_strcmp()了,我想我可能需要使用U_STRING_DECLandU_STRING_INIT宏来指定已知的文字,但我不确定。文档显示它们会导致UChar[],尽管我认为我需要UChar32[]......而且我不确定如何正确使用它们。欢迎在这里提供任何指导。在阅读了一系列数字字符后,我一直在转换它们,
strtol()以便可以使用它们。自从我现在转换以来,ICU 是否提供了类似的功能UChar32[]?