如何从字符串中解析欧元符号?

How can I parse the Euro symbol from a string?

我正在尝试为每个字符解析一个字符串字符,以便我可以根据每个字母加载图像。因此,如果文本是“你好”,我将打印 5 个字母相同但在 Photoshop 中制作的图像。 它工作正常,直到我想解析 € 符号。

std::string al = "Test €";

std::string letter="";
for (int i=0; i< al.length();++i)
{
    if (al[i]=='.') letter ="dot";
    else if (al[i]==',') letter ="coma";
    else if (al[i]==' ') letter ="space";
    //else if (al[i]=='€') letter ="euro";
    else letter=al[i];
}

这工作正常:letter 将获取值:"T","e","s","t","space" 但是如果我取消注释 else if (al[i]=='€') letter ="euro"; 并尝试构建它,那么我会收到一条红色消息错误,内容为:

warning: multi-character character constant

所以问题是我需要知道 al[i] 是否是能够将“欧元”赋给字母的 € 符号(然后我的代码才能使用它)

我在 google 上搜索并发现 link"\u20AC" 是 € 的 c++ 代码,我想这个符号可能需要一个字节以上,但仍然找不到如何处理它并能够在我的代码中解析它。知道我该怎么做吗?

非常感谢。

注意:我不知道使用的 C++ 版本(不知道在哪里可以查看)但我知道它不是 c++11

std::string 假定所有字符都编码为一个字节。你想要的符号是一个用两个字节编码的 unicode 字符(这就是你得到 'multi character character' 错误的原因)

最好使用理解 unicode 的库并坚持使用它。这个问题可能是相关的:unicode string in c++ with boost

第一个问题是您应该注意在源代码中使用 Unicode 字符。编译器只需要支持特定的字符集,并不是所有的编译器都喜欢你的代码。我建议您阅读 this 答案以获得更详细的解释。

第二个问题是字符太大,无法用字符文字表示。您需要明确告诉编译器改用宽字符文字。

L'\x20AC`   // Notice the preceeding L

第三个问题是您的其余代码仍然使用窄字符串。将 std::string 更改为 std::wstring

"\u20AC" 是一个字符串,所以你应该把你的大字符串分成一些子字符串 然后你和他们比较。如果它们相等,则替换它 否则你替换子字符串中的每个字符

string al = "Test €";  (assume you declared std namespace already) 
string letter="";
char* ch = strtok(al," ");

while(ch!=NULL) {
    if(al.compare(ch)==0){ 
        letter="euro";
    }
    //your code here
}