Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 24.09.2023
Сообщений: 12

Русские буквы в VSCode

21.03.2024, 14:50. Показов 6960. Ответов 59

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста. Использую VSCode с выбранной кодировкой Cyrillic (Windows 1251). В программе ключевые строки:
C
1
2
3
4
5
6
7
8
#include <locale.h>
#include <stdio.h>
int main(){
   setlocale(LC_ALL, "ru_RU.CP1251);
   char s;
   scanf("%c", &s);
   printf("%d", s);
}
Почему при вводе букв русского алфавита 'п' и 'р' выводятся не последовательные числа(они же подряд идут в алфавите), а с промежутком в 49(п = -81, р= -32, до 'п' и после 'р' обычная числовая последовательность). Мне очень важно, чтобы числовые значения русских букв были последовательными числами, как в алфавите(можно исключить букву ë). Подскажите, как поменять кодировку. Или другие варианты.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2024, 14:50
Ответы с готовыми решениями:

Русские буквы в Borland C++ 5.2
Здравствуйте уважаемые программисты. Вот решил перейти на вышеназванную среду разработки, по причине ее удобства (для такого новичка как...

Не выводит русские буквы
После выполнения программы в cmd место букв каракули непонятные #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #define...

Не печатаются русские буквы
Добрый день, столкнулся с такой странностью int main(void){ SetConsoleCP(CP_UTF8); SetConsoleOutputCP(CP_UTF8); ...

59
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12844 / 7593 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
23.03.2024, 01:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Eddy_Em Посмотреть сообщение
а вы научные статьи хоть раз писали?
Нет, но вёрсткой журналов, буклетов, проспектов, etc... занимаюсь с середины 90-ых и по сей день. Кстати, не представляю, как в Линуксе (при всей любви к этой ОС) картинку в CMYK вменяемым образом поделить. Знаю про плагин для GIMP, который 4 слоя с как бы плашками создаёт, из которых потом можно DCS сделать. Но это ересь полная. Да и верстать многостраничный документ со связанными текстовыми блоками и обилием картинок в InDesign мне как-то проще...
0
Нарушитель
447 / 888 / 106
Регистрация: 23.11.2021
Сообщений: 5,209
Записей в блоге: 19
23.03.2024, 09:52
easybudda, и не стыдно вам проприетарщиной пользоваться, когда есть латех?
0
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 903
23.03.2024, 09:56
Цитата Сообщение от Eddy_Em Посмотреть сообщение
А логику подкрутить? В UTF32 фиксированная длина буквы - 4 байта.
у вас логика сломалась. ибо UTF8 как раз сделали чтобы память экономить. А в UTF32 один байт всегда ноль - ток что это просто выкинутые ресурсы комптютера. Конечно для ваших мелких задач это незначительно, но вот когда текстовых данных много это выливается во внушительные суммы.

если латех не научили - это проблемы тех кто пользуется латехом и не участвует в его разработке - вот вы скорее всего ни разу им не отправили баг-репорт когда натолкнулись на конкретную проблему с utf8.
0
Нарушитель
447 / 888 / 106
Регистрация: 23.11.2021
Сообщений: 5,209
Записей в блоге: 19
23.03.2024, 09:57
Aledveu, да плевать мне - я идиотскими кодировками вроде утф8 не пользуюсь. Я ж не китаец!
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
23.03.2024, 11:42
Цитата Сообщение от Aledveu Посмотреть сообщение
у вас логика сломалась. ибо UTF8 как раз сделали чтобы память экономить
Чтобы память экономить у кого латинский алфавит. А для всех остальных память не экономится. Где справедливость?
Да и обработка легко делается на латиннице. А как быть у кого не латинница? Да никак. Потому что НИКТО в здравом уме и твердой памяти не буде писать строковую библу под utf8. Под utf16 - пожалуйста, еще куда ни шло.
Чем балаболить покажи код для нахождения длины строки в utf8, не говоря уж о более продвинутых функций обработки строк. Я ОЧЕНЬ хочу ЭТО увидеть.
0
Нарушитель
447 / 888 / 106
Регистрация: 23.11.2021
Сообщений: 5,209
Записей в блоге: 19
23.03.2024, 11:47
Цитата Сообщение от CoderHuligan Посмотреть сообщение
покажи код
++
Когда я выделяю буфер из 256 символов в КОИ8, я уверен, что туда всегда влезет до 255 букв. А вот на utf8 туда может влезть очень разное количество символов - в зависимости от контекста. Самая убогая кодировка, которую только можно было придумать. Для славян уже давным-давно разработано несколько приличных кодировок, а китайцам удобней будет utf32 использовать.
1
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,356
23.03.2024, 14:17
Не к месту?
Да у меня всё так...
Тараканы в голове...

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//======================================
bool ansi_or_utf_8(char *cut_ptr, unsigned short &cnt){// Функция опознающая UTF-8
    static unsigned short utf8_txt(0);// При загрузке листбокс считает строчки с символами UTF-8
    short n(0); while (cut_ptr[n + 2]){
        if (static_cast<unsigned char>(cut_ptr[n]) > 143 &&
            static_cast<unsigned char>(cut_ptr[n]) < 192 &&
            static_cast<unsigned char>(cut_ptr[n - 1]) == 208 &&
            static_cast<unsigned char>(cut_ptr[n + 1]) == 208
            ||
            //-------------------------------------- Опознание строки UTF-8
            static_cast<unsigned char>(cut_ptr[n]) > 127 &&
            static_cast<unsigned char>(cut_ptr[n]) < 144 &&
            static_cast<unsigned char>(cut_ptr[n - 1]) == 209
            )
        {
            cnt = utf8_txt++;// Количество строк с символами UYF-8
            return true;
        }
        n++;
    }
    cnt = utf8_txt;
    return false;
}
 
// ***********
// ***********
//--------------------
                int slength = strlen(cut_ptr) + 1;
                int len = MultiByteToWideChar(CP_ACP, 0, cut_ptr, slength, 0, 0);
                //---------------------------------- Текст ANSI или текст UTF-8 --------
unsigned short one(0);
                if (!ansi_or_utf_8(cut_ptr, one))// Вызываем функцию опознать строку с символами UTF-8
                    MultiByteToWideChar(CP_ACP, 0, cut_ptr, slength, buf_ptr, len);
                else{
                    // Если строка содержит символы UTF-8, то перекодирует строку
                    std::wstring_convert<std::codecvt_utf8<wchar_t>> wconv;
                    std::wstring wstr = wconv.from_bytes(cut_ptr);
                    wcscpy(buf_ptr, wstr.c_str());
                    }
А вообще, выделять буфер под UTF8, есть волшебное слово string.
(Не wstring)

Добавлено через 33 минуты
Простите, не си.
Я не на столько упёртый, что бы на сях такое выписывать.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
25.03.2024, 08:08
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Что-то вы тут понамудрили. Вот простой пример: никаких wchar и прочего бреда в хрюникоде не надо:
Это в современных системах не надо, а в винде с вводом-выводом проблемы. Особенно если надо сохранить совместимость с какими-нибудь динозаврами вроде winXP. Вот там даже костыли не помогают.
Цитата Сообщение от Eddy_Em Посмотреть сообщение
А логику подкрутить? В UTF32 фиксированная длина буквы - 4 байта. А в UTF8 зависит от контекста.
Ну вот поэтому utf-32 используют для внутреннего представления в программах (и то - если нужна обработка), а utf-8 - для хранения. utf-8 хороша тем, что сохраняет какую-никакую совместимость с однобайтными кодировками и соответственно Си-шными строковыми функциями.
Кстати, utf-32 не повезло в том, что она не всегда эквивалентна wchar_t. Соответственно, на какой-нибудь винде ввод-вывод снова идет лесом.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Чтобы память экономить у кого латинский алфавит. А для всех остальных память не экономится.
По сравнению с utf-32 экономится: 1-4 байта вместо 4. А с однобайтными вообще сравнивать бесполезно, они задачу представления локальных символов не решают.
Цитата Сообщение от Наталья8 Посмотреть сообщение
// Функция опознающая UTF-8
Вы же понимаете, что отличить utf-8 от какой-нибудь cp1251 только по кодам невозможно. Это в utf-8 есть недопустимые последовательности, а в однобайтных они все валидны.
1
Нарушитель
447 / 888 / 106
Регистрация: 23.11.2021
Сообщений: 5,209
Записей в блоге: 19
25.03.2024, 08:56
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
в винде с вводом-выводом проблемы
Вы же прекрасно знаете: проприетарщина для меня элементарно отсутствует. Как и люди, которые ею пользуются.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
По сравнению с utf-32 экономится: 1-4 байта вместо 4.
Однако, накладные расходы таковы, что вместо utf-32 активно продвигать utf-8 будет лишь, мягко говоря, глупый человек.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
25.03.2024, 09:10
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Вы же прекрасно знаете: проприетарщина для меня элементарно отсутствует. Как и люди, которые ею пользуются.
Лично для вас - возможно. Но некоторые вынуждены с ними взаимодействовать.
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Однако, накладные расходы таковы, что вместо utf-32
А каковы? Опишите какую-нибудь вашу типичную задачу, где узкое место было бы именно в парсинге utf-8.
0
Нарушитель
447 / 888 / 106
Регистрация: 23.11.2021
Сообщений: 5,209
Записей в блоге: 19
25.03.2024, 09:31
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Опишите какую-нибудь вашу типичную задачу, где узкое место было бы именно в парсинге utf-8.
У меня таких задач вообще нет: кириллицей я пользуюсь лишь на форумах и во всяких отчетах/документации. В исходниках я даже gettext перестал использовать, т.к. бесполезно это. Но вот если бы я собирался какую-то базу данных сделать, где хранились бы не числовые данные, как обычно, а текстовые на кириллице, то выбрал бы CP1251 - хоть она и харам, зато символы последовательно идут. А т.к. латех позволяет представить тексты абсолютно любой сложности, никакого смысла для русского человека в многобайтных кодировках нет.
0
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 903
25.03.2024, 09:53
Eddy_Em, Если вы вообще не в теме и не пользуетесь ничем кроме английского текста то зачем так рьяно продвигаете однобайтные кодировки. Это уже на религиозные войны похоже.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
25.03.2024, 11:20
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А с однобайтными вообще сравнивать бесполезно, они задачу представления локальных символов не решают.
Очень смешно.
0
Нарушитель
447 / 888 / 106
Регистрация: 23.11.2021
Сообщений: 5,209
Записей в блоге: 19
25.03.2024, 11:32
Цитата Сообщение от Aledveu Посмотреть сообщение
не пользуетесь ничем, кроме английского текста
Как же не пользуюсь? А документация? В латехе и русскоязычных Readme у меня всегда кодировка КОИ8-Р.
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,356
25.03.2024, 13:15
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вы же понимаете, что отличить utf-8 от какой-нибудь cp1251
Если нет этих кодов, то строка летит напрямую. Без перекодировки.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
25.03.2024, 16:16
Цитата Сообщение от Eddy_Em Посмотреть сообщение
У меня таких задач вообще нет
Ну а тогда о чем речь, если лично на вас никак не влияет будет ли в сторонних программах utf-8, utf-32, cp1251 или что-то другое.
Цитата Сообщение от Eddy_Em Посмотреть сообщение
базу данных сделать, где хранились бы не числовые данные, как обычно, а текстовые на кириллице
Не знаю какие данные у вас, а у нас результаты измерений записываются в таблицу, и удобно, когда у нее есть шапка с обозначением какой столбец за что отвечает. Как вы понимаете, мне не пришлось прикладывать никаких усилий чтобы юзер мог вписать туда хоть кириллицу, хоть греческий. Любая программа эту таблицу корректно откроет.
0
25.03.2024, 21:06

Не по теме:

Цитата Сообщение от Eddy_Em Посмотреть сообщение
никакого смысла для русского человека в многобайтных кодировках нет
А с интернетом что делать? Попросить весь мир перейти на кои8р? Или изиолироваться от него?

0
25.03.2024, 21:10

Не по теме:

Цитата Сообщение от zayats80888 Посмотреть сообщение
А с интернетом что делать?
Да ничего не делать - как и раньше было. Вообще-то, если ты не в курсе, браузеры много разных кодировок понимают. Вот у меня, например, все веб-странички, где есть кириллица, на КОИ8-Р. Можешь, кстати, на сайт нашей обсерватории зайти - там то же самое.
Потому что вменяемые люди понимают - utf8 не нужна абсолютно никому.

0
25.03.2024, 21:16

Не по теме:

Цитата Сообщение от Eddy_Em Посмотреть сообщение
Вообще-то, если ты не в курсе, браузеры много разных кодировок понимают
Но ты ж предлагаешь от них отказаться, ну или говоришь что они не нужны...

0
25.03.2024, 22:40

Не по теме:

Цитата Сообщение от Eddy_Em Посмотреть сообщение
Вот у меня, например, все веб-странички, где есть кириллица, на КОИ8-Р. Можешь, кстати, на сайт нашей обсерватории зайти - там то же самое.
Потому что вменяемые люди понимают - utf8 не нужна абсолютно никому.
поэтому часть страниц на КОИ8-Р а другая на utf-8
https://www.sao.ru/hq/lizm/ru/history.html
а другие сделаны из ворда и в кодировке 1251
https://www.sao.ru/hq/sun/rus/personalr.htm
ещё есть iso-8859-1
в общем зоопарк кодировок на одном сайте и каждый по своему делает.
пока из ваших утверждений понятно только то что вы считаете несогласных с вами людей невменяемыми

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.03.2024, 22:40

Не выводятся русские буквы
написал код в viual studio 2008 и не как не могу разобраться почему не выводит русские буквы #include &lt;stdio.h&gt; #include...

Не выводятся русские буквы
Подскажите пожалуйста что добавить в программу написанную на visual studio 2008 #include &quot;stdafx.h&quot; main() { ...

Русские буквы в консоли Windows
COKPOWEHEU, вот в такой программке #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include &lt;locale.h&gt; #define peopl_count...

Не работают русские буквы в коде
Всем привет. Задание такое: Написать функцию, которая возвращает True, если символ, полученный функцией в качестве аргумента, является...

Напечатать строчные русские буквы входящие в текст
Дан текст из 60 литер. Напечатать только строчные русские буквы, входящие в этот текст. (через библиотеку stdio).


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru