比较 UTF-8 字符

Compare UTF-8 characters

这是一个解析函数:

double transform_units(double val, const char* s)
{
    cout << s[0];
    if (s[0] == 'm') return val * 1e-3;
    else if (s[0] == 'µ') return val * 1e-6;
    else if (s[0] == 'n') return val * 1e-9;
    else if (s[0] == 'p') return val * 1e-12;
    else return val;
}

在带有“µ”的行中,我收到了警告:

warning: multi-character character constant [-Wmultichar]

字符“µ”未被捕获。

如何比较多字节字符?

编辑:一个肮脏的解决方法是检查它是否小于零。正如 Giacomo 提到的,它是 0xCE 0xBC,这两个字节都大于 127,因此小于零。它对我有用。

How to compare multibyte characters?

您可以通过使用多个字节来比较由多个字节(更一般地,多个代码单元)组成的unicode代码点。 s[0] 只是一个 char,它是一个字节的大小,因此它本身不能包含多个字节。

这可能有效:std::strncmp(s, "µ", std::strlen("µ")) == 0