std::下面的例子从网站没有给出预期的结果

  • 本文关键字:结果 std 网站 c++
  • 更新时间 :
  • 英文 :


我找到了一个std::tolower的例子,在这里:https://en.cppreference.com/w/cpp/string/byte/islower

有一个例子,根据网站,应该返回falsetrue的这位代码:

#include <iostream>
#include <cctype>
#include <clocale>

int main()
{
unsigned char c = 'xe5'; // letter å in ISO-8859-1

std::cout << "islower('\xe5', default C locale) returned "
<< std::boolalpha << (bool)std::islower(c) << 'n';

std::setlocale(LC_ALL, "en_GB.iso88591");
std::cout << "islower('\xe5', ISO-8859-1 locale) returned "
<< std::boolalpha << (bool)std::islower(c) << 'n';

}

但是在我自己的IDE中复制粘贴这一点给了我falsefalse,网站本身的run this code button也是如此。

编辑:所以locale没有被正确设置。使用windows 10和最新的Jetbrains Rider

如此:

assert(std::setlocale(LC_ALL, "en_US.UTF-8"));
//assert(std::setlocale(LC_ALL, "en_GB.iso88591"));
printf ("Locale is: %sn", setlocale(LC_ALL,NULL) );

但是取消注释其他语言环境会抛出错误。

问题是在Windows区域设置名称与Linux不相同。

在Windows上iso88591由代码页1252表示,因此可能的区域设置名称之一是:.1252:

std::setlocale(LC_ALL, ".1252");

不确定,但也有可能.Windows-1252也会做这项工作。

您也可以尝试boost.locale来统一语言环境名称(因此它可以在所有平台上工作)。因为这是c++,你需要使用std::tolower(std::locale)。

最新更新