如何使语言友好的功能降低?

时间:2014-04-24 19:13:20

标签: c++ string wstring tolower

我希望一个函数'降低'(从单词)在两种语言上正常工作,例如英语和俄语。我该怎么办?我应该使用std :: wstring吗,或者我可以使用std :: string吗? 此外,我希望它是跨平台的,不要重新发明轮子。

2 个答案:

答案 0 :(得分:6)

这类事物的规范库是ICU:

http://site.icu-project.org/

还有一个提升包装器:

http://www.boost.org/doc/libs/1_55_0/libs/locale/doc/html/index.html

另见这个问题: Is there an STL and UTF-8 friendly C++ Wrapper for ICU, or other powerful Unicode library

首先确保你理解了语言环境的概念,并且你已经牢牢掌握了Unicode和更常见的编码系统的全部内容。

一些好的读物可以快速入手:

http://joelonsoftware.com/articles/Unicode.html

http://en.wikipedia.org/wiki/Locale

答案 1 :(得分:0)

我认为这个解决方案没问题。我不确定它是否适合所有情况,但这很有可能。

#include <locale>
#include <codecvt>
#include <string>

std::string toLowerCase (const std::string& word) {
    std::wstring_convert<std::codecvt_utf8<wchar_t> > conv;
    std::locale loc("en_US.UTF-8");
    std::wstring wword = conv.from_bytes(word);
    for (int i = 0; i < wword.length(); ++i) {
       wword[i] = std::tolower(word[i], loc);
    }
   return conv.to_bytes(wword);
}