将 unicode 字符串与 c ++ 符号进行比较?

Compare unicode string with c ++ sign?

本文关键字:比较 符号 unicode 字符串      更新时间:2023-10-16

我希望比较后的结果是 1,因为两个字符串完全相同,我不明白为什么这是 0 以及如何处理它?

string s1=""Kilómetro 0,72"";
s1=s1.substr(1,s1.length()-2);
cout<<s1<<endl;
string s2="Kilómetro 0,72";
cout<<s2<<endl;
if(s1==s2) cout<<1;
else cout<<0;

因为你的两个字符串不一样。(请注意重音在s2o的偏移量。这个工作:

#include <string>
#include <iostream>
int main()
{
using namespace std;
string s1=""Kilómetro 0,72"";
s1=s1.substr(1,s1.length()-2);
cout<<s1<<endl;
string s2="Kilómetro 0,72";
cout<<s2<<endl;
if(s1==s2) cout<<1;
else cout<<0;
return 0;
}

您的字符串在视觉上是等效的,但一个使用 ASCIIo和组合重音(两个 Unicode 代码点 U+006F,U+0301(,另一个使用ó(一个 Unicode 代码点 U+00F3(。

您需要使用 ICU 等库规范化字符串以正确比较它们,或者至少与您的示例一起,在两个字符串常量中以相同的方式键入组合字符。

在末尾添加以下代码:

for(int i = 0; i < s1.length(); i++) {
cout << (int)(unsigned char)s1[i] << " " << (int)(unsigned char)s2[i] << endl;
}

它会帮助你。