|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
||||||
Utf-8. И снова кодировки28.10.2014, 19:30. Показов 5645. Ответов 51
Метки нет (Все метки)
Доброго времени суток. Подскажите как конвертировать всё введённое с клавиатуры в utf-8.
Т.е. консоль запускается в какой-то стране Мира, там пользуют некий язык. Нужно определить текущую кодировку консоли и переконвертировать в utf-8...как? Виндось. Нужна функция вида:
Надеюсь не слишком трудно будет жахнуть работающую реализацию подобной штуки. Спасибо.
0
|
||||||
| 28.10.2014, 19:30 | |
|
Ответы с готовыми решениями:
51
Перевод из кодировки UTF - 8 в ANSI Конвертация из ASCII в UTF-32 или UTF-8 в UTF-32
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 29.10.2014, 19:53 | |
|
0
|
|
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
||
| 29.10.2014, 20:23 [ТС] | ||
|
Добавлено через 1 минуту Или просто использовать w_ варианты ввода? Или всё вместе?
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||
| 30.10.2014, 00:53 | |||||||
|
Ну или можно перевести консоль в режим UTF16 (нормально работает только в VS):
1
|
|||||||
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
|||||||||
| 30.10.2014, 12:36 [ТС] | |||||||||
|
Добавлено через 11 часов 40 минут
0
|
|||||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 30.10.2014, 12:43 | |
|
Там вроде какой-то префикс в файле должен быть, чтобы он распознавался как utf8.
0
|
|
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
||
| 30.10.2014, 13:03 [ТС] | ||
|
Добавлено через 6 минут Вот это " ਢ¥â" у меня "привет"...
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 30.10.2014, 13:34 | |||
|
Добавлено через 17 минут Запутал только.Короче ошибка твоя в том, что у тебя файл в UTF-8, а читаешь ты его как UTF-16 (в wchar_t). Естественно после этого результат нечитаемый. Если ты хочешь читать файл (с помощью streams) в utf8 и перекодировать его в utf16 на лету, то использовать нужно один из стандартных классов отсюда. Или написать свой с использованием MultiByteToWideChar. Если сам не сможешь, могу потом показать как. Мы на работе виндов не держим, поэтому только веччером.
0
|
|||
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
|||||||||||||
| 30.10.2014, 14:00 [ТС] | |||||||||||||
Результат программы выше - я ввожу привет, открываю файл - крокозябы =( Добавлено через 4 минуты Добавлено через 2 минуты Прошу поправить что не так в коде выше, а дальше я вроде сам смогу осилить куда и что. Надеюсь упростил задачу до предела, чтобы людям не пришлось вникать в не нужные вещи и тратить своё время зря) Добавлено через 1 минуту Я грешу на
0
|
|||||||||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 30.10.2014, 14:17 | |||
Сообщение было отмечено Retyrn0 как решение
РешениеОстальные способы (codecvt и т.п.) заставить работать wcin включают в себя перекодировку на лету, чего мы пытаемся избежать. То, что ты вводишь в консоли конвертируется либо в DOS кодировку, либо в одну из локальных кодировок (если была выставлена SetConsoleCP, например). Естественно wcin уже получает не юникод. Чтобы он это не делал, нужно либо сменить режим (через setmode), либо сразу читать юникод через API, (W)ReadConsole.
0
|
|||
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
||
| 30.10.2014, 14:22 [ТС] | ||
|
Добавлено через 2 минуты ПОжалуй на данный момент это лучший ответ - я начинаю понимать почему всё так запутано и сложно(на первый взгляд) - это потому что разработчики хотели упростить работу потенциальным программистам
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 30.10.2014, 14:59 | |||
Я же там уже все реализовал. Бери и пользуйся...Сначала винда не была юникодная, и были пляски с локальными кодировками. Потом она стала юникодная, но пляски остались, потому что тонны софта уже написаны для них. Поэтому нужна эта магия с define _UNICODE и W\A версиями API. Чтобы старый код собирался в новых системах. Конкретно с консолью все еще хуже, консоли нужна была поддержка DOS-приложений, поэтому там по-умолчанию DOS-кодировка (в случае русской винды - это 866). Теперь внимание: винда стала юникодной изнутри, но требования эти никуда не делись. Итог - постоянные перекодировки. Поэтому новый софт надо писать забыв и про ANSI версии API и про DOS-консоль, чтобы их избежать. А еще, очень многие просто не понимают что есть что. Поэтому в добавок к объективным сложностям добавляют еще какие-то свои.
0
|
|||
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
|||||||
| 30.10.2014, 15:09 [ТС] | |||||||
0
|
|||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||
| 30.10.2014, 15:46 | ||
0
|
||
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
||
| 30.10.2014, 15:54 [ТС] | ||
|
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||||||
| 30.10.2014, 17:17 | ||||||
|
Если достаточно вводить только русский и английский, то всё работает без _setmode(). Вот чтение строки и запись в файл utf8 c BOM:
0
|
||||||
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
|||
| 30.10.2014, 17:28 [ТС] | |||
|
Но решение тоже интересное, находил в нете такое.
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 30.10.2014, 18:13 | |||
![]() Вся суть использования _setmode - это сделать без перекодировки. Добавлено через 1 минуту Если внимательно прочитать мои сообщения, то можно заметить, что я об этом говорил. Добавлено через 6 минут Если локаль по каким-либо причинам отличается от ANSI-кодировки консоли, то кодирование будет неверным и в wchar_t нам вернется ерунда. У ТС как раз это самое и произошло. Ясное дело, что твой пример работает. Ты выставил локаль равную кодировке консоли по-умолчанию. Перекодирование 866->UTF16 прошло успешно, поэтому все нормально. Но, во-первых, вжесткую завязываться на конкретную локаль - это неправильно (безотносительно задачи ТС). Во-вторых тут лишняя перекодировка, которой могло бы и не быть.
0
|
|||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 30.10.2014, 18:30 | |
|
Тем не менее wcin.getline() работает без _setmode(). Я говорил об этом.
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 30.10.2014, 18:38 | ||
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 30.10.2014, 18:50 | |
|
Я просто немного о другом сказал. wcin работает без переключения консоли на utf, и корректно формирует строку, но ограничен выбранной локалью.
Можно французскую установить.
0
|
|
| 30.10.2014, 18:50 | |
|
Как сделать чтобы таймер дойдя до 0 стартовал снова и снова? Кодировки (ошибки кодировки) в логировании
Снова ошибки кодировки UTF-8 именно подпись BOM Разные кодировки файлов (ASCII, UTF-8, UTF-16) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|