我在Windows中使用vc ++ 2010和MFC,使用Unicode。
以下是我的代码:
CStringW strLowerGreek(L"αβγ");
CStringW strUpperGreek(L"ΑΒΓ");
if (0 == strLowerGreek.CompareNoCase(strUpperGreek))
AfxMessageBox(_T("Two strings are the same"));
else
AfxMessageBox(_T("Two strings are different"));
当我运行代码时,弹出消息是“两个字符串不同”。
我想做的是在C盘中创建αβγ.txt,在D盘中创建ΑΒΓ.txt(我不能在同一个盘中创建αβγ.txt和ΑΒΓ.txt) ,我认为αβγ.txt和ΑΒΓ.txt具有相同的名称(不是完整路径,只是文件名),那么我想比较两个文件的内容,并检查它们是否相同。所以我需要一个函数来比较两个文件名称内容区分大小写。
我的问题是:
CString
成员函数CompareNoCase
不支持希腊小写和大写。那么有什么东西可以在MFC或C ++中完成工作吗?答案 0 :(得分:4)
您需要做的是设置区域设置。例如:
setlocale(LC_ALL, "");
CStringW strLowerGreek(L"αβγ");
CStringW strUpperGreek(L"ΑΒΓ");
int i = strLowerGreek.CompareNoCase(strUpperGreek);
CStringW strText;
strText.Format(L"%s %s %d", strLowerGreek, strUpperGreek, i);
AfxMessageBox(strText);
CStringW strLowerGreek2 = strLowerGreek.MakeUpper();
i = strLowerGreek2.CompareNoCase(strUpperGreek);
strText.Format(L"%s %s %d", strLowerGreek2, strUpperGreek, i);
AfxMessageBox(strText);
我已使用setlocale设置区域设置。最初我将其设置为希腊语("ell"
)语言环境,但除C语言环境之外的任何语言环境都有效。因此,可以使用更通用的setlocale(LC_ALL,"");
来将当前语言环境设置为等于系统语言环境。
当我使用默认语言环境(英语)保留时:
32
。当我首先将区域设置设置为希腊语:
时0
。 CompareNoCase
的结果:
MakeUpper
的结果:
我认为设置区域设置只会影响日期格式化等内容。但它也会影响字符串比较。有关其他信息,请参阅_wcsicmp
参考:Call setlocale with any locale other than the C locale before the call to _wcsicmp.。