Отправляет email-рассылки с помощью сервиса Sendsay

За 2014-04-01

[prg] Re[3]: C++ tolower не переводит кирилицу в нижний регистр

Приветствую всех.

> А разве не UTF-8? Всё ещё Win-1251?

Вопрос и пример касались однобайтовых кодировок.
В Windows API (сюда же входит API для работы с GUI-элементами) функции,
принимающие символьные последовательности в качестве аргументов,
присутствуют в двух вариантах: для однобайтовых последовательностей и для
широкосимвольных последовательностей.
Во втором случае -- это utf-16le (ещё с прошлого века).

   "i_chay" 2014-04-01 22:20:10 (#2991726)

[prg] Re[2]: C++ tolower не переводит кирилицу в нижний регистр

Vande omentaina, "i_chay"!

i> окно Windows использует кодовую страницу 866, а GUI-приложения -- кодовую
i> страницу 1251).

А разве не UTF-8? Всё ещё Win-1251?

   Menelion Elensuule 2014-04-01 21:57:56 (#2991707)

[prg] Re: C++ tolower не переводит кирилицу в нижний регистр

Приветствую всех.

> locale loc;
...
Имеет смысл ещё и почитать документацию по std::locale.

> Может ли этот метод перевести кирилические символы в нижний регистр?

Может, если вы установите соответствующую локаль. По умолчанию в коде
пролога программ на C/C++ устанавливается локаль "C", в которой нет
кириллических букв как понятия.
Вам нужно установить кодовую страницу, соответствующую тем строкам, которые
вы собираетесь преобразовывать (и еще принять во внимание, что консольное
окно Windows использует кодовую страницу 866, а GUI-приложения -- кодовую
страницу 1251).
Для ОС Windows и кодовой страницы 1251 (в которой, скорее всего, написан ваш
код), вместо вышеприведённой строки, можно попробовать поставить эту:
locale loc("russian_russia.1251");
...

   "i_chay" 2014-04-01 18:01:56 (#2991457)

[prg] C++ tolower не переводит кирилицу в нижний регистр

Здравствуйте, уважаемые!

Приходится огромное количество документации читать на английском, по этому,
видимо, где-то мог упустить из виду особенности использования метода
tolower. Вот код, который преобразует аббревиатуру из латинских символов в
нижний регистр и не преобразует из кирилических:

#include <string> // std::string

#include <locale> // std::locale, std::tolower

#include <fstream>

using namespace std;

int main () {

ofstream out("out.txt");

locale loc;

string str="IBM, ГТО\n";

for (string::size_type i=0; i<str.length(); ++i)

out << tolower(str[i],loc);

return 0;

}

Может ли этот метод перевести кирилические символы в нижний регистр? Если
да, то как?

Администратор Самарского голосового чата,
Самарского сервера LKF-книг
Грызунов Александр Викторович.

   2014-04-01 13:35:19 (#2991200)