Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Вывод UTF-8 символов на стандартное ус-во - C++

03.11.2012, 01:17. Просмотров 1214. Ответов 11
Метки нет (Все метки)

У K&R если задание на подсчёт каждого символа из стандартного потока.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// K&R. Программа подсчитует количество каждого символа
// из потока.
 
#include <stdio.h>
 
#define MAX_ALPHA 126 // 126 - тильда
#define MIN_ALPHA 32 // 32 - пробельный символ
 
main()
{
    int c, i, n;
    n = MAX_ALPHA - MIN_ALPHA;    
    int count[n];
    
    for( i = 0; i < n; ++i )
    count[i] = 0;
    
    while( (c = getchar()) != EOF ) {
    ++count[c - MIN_ALPHA];
    }
    
    printf( "Result:\n" );
    for( i = 0; i < n; ++i)
    printf( "%d: %c - %d\n", i, i + MIN_ALPHA, count[i] );
}
Можно ли подобным способом, отобразить русские символы. Спасибо.
Зы. Компилятор gcc

Добавлено через 6 часов 16 минут
Или просто ткните носом где можно почитать о руссификации консоли
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2012, 01:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод UTF-8 символов на стандартное ус-во (C++):

Подсчет символов UTF-8. Считывание пробельных символов - C++
Написал программу считывания файла с кодировкой UTF-8. Но она не считывает пробельные символы. Программа получает на вход файл из...

Конвертация из ASCII в UTF-32 или UTF-8 в UTF-32 - C++
Собсно сабж.

Из UTF-8 коды символов CP866 - C++
Подскажите плиз. Есть строка в UTF-8, из нее необходимо получить char состоящий из кодов этих символов в CP866 Мысли такие, с помощью...

Чтение файла в кодировке utf-8 и вывод в консоль - C++
Здорова! Пытаюсь прочитать файл в кодировке utf-8 (вот он ) и вывожу его в консоль, ничего не получается. Вот код: #include...

Чтение файла (с кракозябрами) с однобайтовой кодировкой, конвертация в UTF-8 и вывод в другой файл - C++
Добрый день, форумчане. Может у кого есть заготовка или кто поделится советом, необходимо прочитать файл (с кракозябрами) с однобайтовой...

Как настроить ввод русских символов и в дальнейшем вывод этих символов - C++
Подскажите как в этом коде настроить ввод русских символов и в дальнейшем вывод этих символов. Данный код выводит лишь всякую ерунду место...

11
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.11.2012, 03:09 #2
C++
1
setlocale(LC_ALL,"Russian");
Или я что-то не понял?
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
03.11.2012, 03:38  [ТС] #3
Мне интересно, можно ли провернуть этот прикол с gcc

Добавлено через 12 минут
И как вывести посимвольно символы Unicode?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.11.2012, 04:14 #4
C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <locale.h>
int main()
{
    setlocale(LC_ALL,"Russian");
    wprintf(L"%s",L"Строка Unicode!");
    getchar();
    return 0;
}
Вывод UTF-8 символов на стандартное ус-во
Вывод UTF-8 символов на стандартное ус-во
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.11.2012, 04:29 #5
Для посимвольного вывода функция putwchar
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <locale.h>
int main()
{
    setlocale(LC_ALL,"Russian");
    wchar_t str[]=L"UNICODE строка";
    int i=0;
    while(str[i]){
        putwchar(str[i]);++i;putwchar(L'\n');
    }
    putwchar(L'\n');
    return 0;
}
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
03.11.2012, 04:43  [ТС] #6
wchar_t такого типа у меня не обнаружено, пробудет через int:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <locale.h>
int main()
{
    setlocale(LC_ALL,"Russian");
    int str[]=L"UNICODE строка";
    int i=0;
    while(str[i]){
        putwchar(str[i]);++i;putwchar(L'\n');
    }
    putwchar(L'\n');
    return 0;
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Inferior 1 (process 6539) exited normally]
(gdb) quit(gdb) run
Starting program: /media/win_d/Helloworld/currents/test 
U
N
I
C
O
D
E
 
?
?
?
?
?
?
 
[Inferior 1 (process 6539) exited normally]
(gdb) quit
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.11.2012, 04:47 #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
wchar_t такого типа у меня не обнаружено, пробудет через int:
Попробуйте подключить wchar.h
Но у меня, например, gcc без проблем скомпилировал
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
03.11.2012, 04:50  [ТС] #8
в режиме с++ компиляция протекает без ошибок, даже с типом wchar_t, но результат аналогичен

Добавлено через 3 минуты
при подключении <wchar.h> компиляция осуществляется без ошибок, результат прежний
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.11.2012, 05:14 #9
C++
1
setlocale(LC_ALL, "ru_RU.utf8");
Вывод UTF-8 символов на стандартное ус-во
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.11.2012, 05:33 #10
Вот этот вариант проверил в Windows и в Linux
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
int main()
{
    if (!setlocale(LC_ALL, "ru_RU.utf8"))
        if (!setlocale(LC_ALL, "russian"))
            return 1;
    wchar_t str[]=L"UNICODE строка";
    int i=0;
    while(str[i]){
        putwchar(str[i]);++i;putwchar(L'\n');
    }
    putwchar(L'\n');
    getwchar();
    return 0;
}
1
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
03.11.2012, 15:53  [ТС] #11
В моём случаи работает с en_US:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
 
int main()
{
    if (!setlocale(LC_ALL, "en_US.utf8"))
    return 1;
    
    int i = 0;
    wchar_t str[] = L"UNICODE строка";
    
    while( str[i] ){
    putwchar( str[i] );
    ++i;
    putwchar(L'\n');
    }
    putwchar( L'\n' );
    getwchar();
    
    return 0;
}
Единственное что осталось не ясным, так это значение оператора L перед строковым или символьным литералами
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.11.2012, 15:57 #12
Цитата Сообщение от xtorne21st Посмотреть сообщение
Единственное что осталось не ясным, так это значение оператора L перед строковым или символьным литералами
L указывает, что это строка Юникод.
Попробуйте убрать этот символ, скорее всего, компилятор выдаст ошибку о невозможности преобразования типа char к wchar_t.
А вообще в файле tchar.h содержаться полезные макросы для работы с юникодом
1
03.11.2012, 15:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2012, 15:57
Привет! Вот еще темы с ответами:

getBytes('UTF-16') даёт UTF-16LE или UTF-16BE? - Java ME
Добрый день! Делаю J2ME-клиента к некому серверу, исходников которого у меня нет, но есть работающий клиент на C#. Выяснилось, что C#...

<globalization fileEncoding='utf-8' requestEncoding='utf-8' responseEncoding='utf-8' /> - .NET
Если в коде пишу строку скажем Response.Write ('Вася дурак') - все срабатывает нормально, а если в &lt;body&gt;&lt;h1&gt;Вася дурак&lt;/h1&gt;&lt;/body&gt; - то...

C, Linux, UTF-8 - не видно русских символов - C (СИ)
Здравствуйте. Я только начинаю разбираться с языком и кодировками и возник следующий вопрос. Есть файл в кодировке utf-8, хочу...

UTF-8: вместо буквенных символов выводятся квадратики - PHP БД
Странно, вместо буквенных символов выводятся квадратики , что это подскажите...! может проблемы с utf 8?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.