C++ &引用;警告:多字符字符常量[-Wmultichar]”;而且这个程序不起作用

C++ &引用;警告:多字符字符常量[-Wmultichar]”;而且这个程序不起作用,c++,string,unicode,utf-8,C++,String,Unicode,Utf 8,所以,我正在编写程序将符文翻译成英文字母表 它向我发出警告“警告:多字符字符常量[-Wmultichar]” 下面是代码(不是来自程序,但它有相同的问题) 代码是用c编写的++ string s=”ᛡᚣ";(由两个utf-8字母组成的字符串,符文) if(s.at(0)='ᛡ') cout如果查看std::string中字符的表示形式,您会发现每个字符都使用多个字节,因此会出现警告。在处理Unicode时,您需要使用32位的内容来表示单个代码点,或者需要为每个代码点使用多个字节。使用代码点可能已

所以,我正在编写程序将符文翻译成英文字母表 它向我发出警告“警告:多字符字符常量[-Wmultichar]” 下面是代码(不是来自程序,但它有相同的问题) 代码是用c编写的++

string s=”ᛡᚣ";(由两个utf-8字母组成的字符串,符文)

if(s.at(0)='ᛡ')

cout如果查看
std::string
中字符的表示形式,您会发现每个字符都使用多个字节,因此会出现警告。在处理Unicode时,您需要使用32位的内容来表示单个代码点,或者需要为每个代码点使用多个字节。使用代码点可能已经足够了,但它依赖于不使用组合字符的字符

比较Unicode字符串并不是很简单(我也不知道所有的规则)。使用UTF-8表示数据时,您需要比较字节序列。此外,您需要确保您的Unicode字符串已规范化:某些字符串具有不同的有效表示形式。例如,“我的名字”中的u-umlaut可以用u-umlaut的代码点表示,也可以用u的代码点和组合字符表示dieresis在你的代码里我想你可以用

std::string expect("ᛡ");
if (expect.size() <= s.size() && s.substr(0, expect.size()) == expect)
    std::cout << "YES\n";
std::字符串预期(“ᛡ");

根据编译器的解释,如果(expect.size()),您使用多字符常量,这是一个int,它是实现特定的值。使用utf-8时,您必须比较几个字符。如何在循环中使用它?就像我有string=“”ᚠᚢᚦᚩᚱᚳᚷᚹᚻᚾᛁᛂᛇᛈᛉᛋᛏᛒᛖᛗᛚᛝᛟᛞᚪᚫᚣᛡᛠ"; 是否要转换为字母表?@IntotheVoid:这取决于您打算执行的操作。要查找特定字符,您可以使用
std::string
版本,如果
find()
member。如果您打算进行任何形式的字符串和/或字符处理,您可能需要处理编码,很可能需要使用合适的Unicode库,如ICU。