C++ 如何转换字符串大小写(必须使用Unicode;西里尔文、希腊文等)?

C++ 如何转换字符串大小写(必须使用Unicode;西里尔文、希腊文等)?,c++,unicode,tolower,toupper,C++,Unicode,Tolower,Toupper,我花了很长时间寻找一种方法来将非拉丁字符串转换为大写和/或小写。西里尔文、希腊文和co.书写系统。换句话说:将所有支持大写/小写的字符转换为大写或小写 注意:Qt框架中的QString支持此功能。但我正在寻找一个非Qt的解决方案 我尝试了这段代码,它只支持基本拉丁语(a-z,a-z),不支持ދşŞȧȦ等。(??)为什么如此简约 #include <iostream> #include <string> #include <algorithm> #includ

我花了很长时间寻找一种方法来将非拉丁字符串转换为大写和/或小写。西里尔文、希腊文和co.书写系统。换句话说:将所有支持大写/小写的字符转换为大写或小写

注意:Qt框架中的QString支持此功能。但我正在寻找一个非Qt的解决方案

我尝试了这段代码,它只支持基本拉丁语(a-z,a-z),不支持ދşŞȧȦ等。(??)为什么如此简约

#include <iostream>
#include <string>
#include <algorithm>

#include <boost/algorithm/string.hpp>

using std::cout;
using std::cerr;
using std::endl;
using std::cin;
typedef std::string string;

static string text;

int main(void)
{
  cout << "Enter String: ";
  cin >> text;

  for (size_t i = 0; i < text.length(); i++)
    text[i] = std::toupper(text.at(i));

  cout << "Upper Case (libstdc++): " << text << endl;
  cout << "Upper Case (libboost):  " << boost::to_upper_copy(text) << endl;
}
#包括
#包括
#包括
#包括
使用std::cout;
使用std::cerr;
使用std::endl;
使用std::cin;
typedef std::string字符串;
静态字符串文本;
内部主(空)
{
cout>文本;
对于(size_t i=0;i不可能重复的大小写规则非常复杂,并且很大程度上取决于用户的区域设置。您自己无法合理地编写此代码,您需要一个库来完成繁重的工作。如果您不想使用Qt,那么开源是一个可靠的替代方案。如果您必须支持希腊文,则不能将单个字母小写。低ercase∑是ς或σ,具体取决于上下文。@MSalters我对Unicode中的不一致性并不感到惊讶。如果你看阿拉伯语,上下文形式有单独的块。@Rhymoid:与ISO-8859 IIRC的向后兼容性。