如何对非ascii字符使用tolower函数

Nic*_*ick 4 c++ ubuntu

我试图在非ASCII字符上应用较低的功能.以下代码在Linux(Ubuntu)环境中不起作用,但适用于Windows.

int main() {
        std:string data="ŽŠ";
        std::transform(data.begin(), data.end(), data.begin(), ::tolower);
        cout<< data << endl;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我尝试安装语言包但没有工作.有人可以帮我解释这段代码中缺少的是什么吗?

Rem*_*eau 5

::tolower()依赖于C库中设置的当前语言环境.默认"C"语言环境仅保证处理ASCII字符.Microsoft可能使用与用户当前区域设置匹配的其他默认区域设置.这可以解释为什么代码能够在Windows上运行.

使用::setlocale()设定所需语言环境::tolower()中使用.否则,请使用可移植的Unicode库,例如ICU.