LINUX.ORG.RU

Вывод русских символов в консоль.(с++)

 


0

2

Есть строка с русскими буквами и ее необходимо вывести посимвольно. При выводе символов вместо букв получаю - �. НО если вывести строку целиком, то все символы отображаются правильно! Пробовал выставить локаль, но ничего не изменилось. Как вывести русские буквы на консоль?


Ответ на: комментарий от madao

т.к у тебя символ в юникоде занимает 2 байта,а не один. (возьми и выведи длину строки, все поймешь)

anonymous
()
Ответ на: комментарий от madao

Потому что байты в значки интерпретирует терминал, если ты полностью выдал строку, то он всю информацию получил, а если ты по байтам рвёшь и перемежаешь LF, то и получаются некорректные кодовые точки.

Artificial_Thought ★★★★
()
Ответ на: комментарий от Artificial_Thought

Скачал библиотеку и вот что вышло

#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <iostream>

int main(int argc, char **argv)
{
	UnicodeString s("привет");
	std::cout<<(s[0]);
	return 0;
}
Вывод код символа, но не символ.

madao
() автор топика
Ответ на: комментарий от madao

В Линупсе принято использовать UTF-8 для строк. Берёте строку как char*, берёте <unicode/utf8.h>, U8_FWD_1 позволяет перейти к следующей code point. С помощью неё можно найти в строке границы отдельных UTF-8-символов и вывести их на терминал, перемежая пробелами или чем там надо.

ilammy ★★★
()
Ответ на: комментарий от madao

Что бы вывести символ пришлось сделать такой финт

#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <iostream>

int main(int argc, char **argv)
{
	icu::UnicodeString s("привет");
	icu::UnicodeString ss(s[0]);
	std::cout<<ss;
	return 0;
}
Если кто то знает вариант получше прошу поделиться. Всем помогавшим спасибо!

madao
() автор топика
Ответ на: комментарий от madao

Если кто то знает вариант получше прошу поделиться. Всем помогавшим спасибо!

#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
	char *text = "привет";
	icu::UnicodeString s(text);
	cout << "Text bytes count: " << string(text).size() << endl;
	cout << "Text symbols count: " << s.length() << endl;
	icu::UnicodeString first_symbol(s.charAt(0));
	cout << "First symbol: " << first_symbol << endl;
	return 0;
}

Иди почитай на википедии про utf8 и тогда поймешь что не всегда количество байт равняется количеству символов.

V1KT0P ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.