我正在尝试对非ASCII字符应用较低的功能。以下代码在Linux(Ubuntu)环境中不起作用,但适用于Windows。
int main() {
std:string data="ŽŠ";
std::transform(data.begin(), data.end(), data.begin(), ::tolower);
cout<< data << endl;
return 0;
}
我尝试安装语言包但没有工作。有人可以帮助我在这段代码中缺少什么吗?
答案 0 :(得分:5)
::tolower()
依赖于C库中设置的当前语言环境。默认"C"
语言环境仅保证处理ASCII字符。 Microsoft可能使用与用户当前区域设置匹配的其他默认区域设置。这可以解释为什么代码能够在Windows上运行。
使用::setlocale()
设置要使用的::tolower()
所需的区域设置。否则,请使用可移植的Unicode库,例如ICU。