54 / 4 / 3
Регистрация: 15.06.2014
Сообщений: 36
|
|
1 | |
Греческий в консоли14.10.2014, 13:13. Показов 14433. Ответов 46
Метки нет (Все метки)
Приветствую всех!
Реализовываю некоторое подобие переводчика (крайне примитивный вариант). Удалось настроить русский язык, но как сделать корректным вывод греческого языка в консоль? Так называемый "словарь" в виде обычного текстового документа содержит в себе греческие слова; в консоли все имеет вид "???". Написала код с использованием stl, но, погуглив, натолкнулась на утверждение, что с stl вывести греческий не получится, нужно использовать библиотеку Qt. Кто-нибудь сталкивался с подобным? Заранее благодарна за помощь.
0
|
14.10.2014, 13:13 | |
Ответы с готовыми решениями:
46
Не получается греческий греческий алфавит Эрастофен, греческий философ Запись и чтение из тектового файла иностранных языков(греческий, Немецкий и т.п.) |
Native x86
5514 / 3273 / 934
Регистрация: 13.02.2013
Сообщений: 10,424
|
|
14.10.2014, 13:37 | 2 |
В Windows консоль по-умолчанию работает в кодировке cp866, которая греческие символы выводить не даст. К тому же далеко не все консольные шрифты содержат в себе греческие символы. Так что необходимо выполнение двух условий:
1. Наличие нужных символов в текущем шрифте консоли. Этот шрифт настраивается в свойствах ярлыка или самого окна. В Win7 единственным стандартным шрифтом с греческими символами является Lucida Console. 2. Активной кодовой страницей, допускающей вывод таких символов. Греческая или одна из Unicode-кодировок, например, UTF-8. Изменяется командой chcp или в реестре.
1
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,671
|
|
14.10.2014, 13:46 | 3 |
Просто не нужно использовать консоль для таких целей.
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
||||||
14.10.2014, 13:55 | 4 | |||||
Сообщение было отмечено Pumie как решение
Решение
Pumie, Какие среда разработки и ОС?
Если Windows и Visual Studio (берем их как самый распространенный вариант), то решение такое: Файлик сохраняем в UTF-16, переводим консоль в режим юникода.
Смотрим, чтобы шрифты консоли поддерживали юникод. Этого должно хватить. PS. Т.к. у меня нет на работе винды, то пишу по памяти.
1
|
54 / 4 / 3
Регистрация: 15.06.2014
Сообщений: 36
|
|
14.10.2014, 14:00 [ТС] | 5 |
Спасибо за Ваш ответ.
Шрифт у меня давно такой стоит, но вот насчет команды chcp: могу я это прописать как-то в своей программе (интуитивно, какая-нибудь system ("chcp 65001"))? Решит ли это проблему считывания из самого текстового файла? Как мне объясняли, при работе с такими немассовыми языками возникает несколько проблем: 1) считается ли верно из файла? (нужно сохранить сам файл в определенном виде - Unicode?) 2) корректно ли выведется?
0
|
Native x86
5514 / 3273 / 934
Регистрация: 13.02.2013
Сообщений: 10,424
|
|
14.10.2014, 14:05 | 6 |
Можете, чуть выше ответили.
Нет, это только вывод. Считывание нужно вести с учетом того, что один символ может занимать несколько байт (сколько -- зависит от выбранной кодировки). И для корректной работы с такими строками, читать их нужно в соответствующий строковой тип, согласно правилам выбранной вами библиотеки классов. Да, файл со словарем лучше держать в юникоде, читается он так же, как и любой другой файл, но со считанными данными работает согласно правилам юникода. А вот за вывод и отвечает шрифт и текущая кодовая страница консоли.
1
|
54 / 4 / 3
Регистрация: 15.06.2014
Сообщений: 36
|
|
14.10.2014, 14:06 [ТС] | 7 |
Qt Creator и Windows.
К сожалению, не знаю, как сохранить обычный блокнотовский документ в UTF-16. Насколько мне известно, он сохраняется либо UTF-8 (вроде есть разница), либо Unicode, либо ansi. Может, просто использовать другой текстовый редактор? Про решение "И пользуемся std::wcout, std::wstring для хранения и отобржения строк, std::wofstream для загрузки файла." уже читала, попробую узнать, как именно с этим работать. Но сразу вопрос: я могу использовать этот способ только для греческого языка или мне придется и работу с другими языками изменять добавлением "w"?
0
|
Native x86
5514 / 3273 / 934
Регистрация: 13.02.2013
Сообщений: 10,424
|
|
14.10.2014, 14:10 | 9 |
Unicode -- это и есть UTF-16, но там есть еще разница между Big и Little Indian (на PC используется в основном Little, но возможны варианты).
Рекомендую AkelPad, там можно выбирать кодировку из очень большого списка. "w" -- это от Wide Char, т.е. "широкий символ", что обозначает юникод и одинаково годится для любого языка: от английского до хинди.
1
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
14.10.2014, 14:14 | 10 |
Абстрагирутесь от языков. В идеале программа должна быть написана так, чтобы любой язык можно было использовать. В этом юникод как раз и поможет.
Unicode - это в терминологии блокнота и есть UTF-16 (никогда не понимал почему нельзя было написать там по-человечески).
1
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
14.10.2014, 14:22 | 12 |
Так и я об этом. Почему у них UTF-8 отдельно, а Unicode отдельно. UTF-8 - это же тоже юникод. Не так много там вариантов, чтобы нельзя было их отдельно прописать, если даже хотели заложить раширение списка кодировок на будущее.
В том-то и дело, что нет. Ну да ладно.
0
|
54 / 4 / 3
Регистрация: 15.06.2014
Сообщений: 36
|
|
14.10.2014, 14:28 [ТС] | 13 |
Итак, в итоге я для себя уяснила:
1) для корректного вывода - system ("chcp 65001") 2) сам документ сохраняем в Юникоде, либо UTF-8, что, как я выяснила благодаря Вам, одно и то же 3) корректное считывание из файла. Тут мне поможет магическая буковка "w" (wchar, wstring) Я ничего не упустила?
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
14.10.2014, 14:33 | 14 |
Не по теме: Вообще, у меня сейчас появилась мысль, что это такой маркетинг. Добавлено через 2 минуты Только UTF-16 Конкретно 65001 - это UTF-8, в этом случае версии с w не будут корректно работать, т.к. UTF-8 не хранится в "широких" символах. Нужно еще раз прочитать прошлые посты
1
|
54 / 4 / 3
Регистрация: 15.06.2014
Сообщений: 36
|
|
14.10.2014, 14:41 [ТС] | 15 |
Прошу прощения, сложно дается новый материал.
Чтобы работать с w, нужно иметь документ в UTF-16, так? А саму консоль нужно будет настроить на корректный вывод UTF-16 (тем кусочком кода, что Вы показывали ранее). Теперь я верно поняла?
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
14.10.2014, 15:16 | 16 |
Все верно.
Pumie, Можно использовать и UTF8, вместо UTF-16, там в моем примере выше тогда нужно будет заменить _O_U16TEXT на _O_U8TEXT. Нужно только помнить, что длина строки UTF-8 не равна количеству байт в std::string, т.к. символ кодируется несколькими байтами (до 6 байт на символ в зависимости от языка). (Для UTF16 аналогично, только речь идет о 16-битных машинных словах, а не о байтах. В UTF-16 на один символ может приходиться до 2х 16-битных слов - правда в случае греческого будет использовано только первое слово, как и в случае большинства других языков). Добавлено через 20 минут Pumie, В общем пробуйте, если что не получится, то уточните здесь.
1
|
54 / 4 / 3
Регистрация: 15.06.2014
Сообщений: 36
|
|
14.10.2014, 15:37 [ТС] | 18 |
Конечно, спасибо Вам большое!
Попробую и отпишусь!
0
|
DrOffset
|
14.10.2014, 19:03
Греческий в консоли
#20
|
0
|
14.10.2014, 19:03 | |
Отобразить в консоли:увеличить и уменьшить длину массива на заданное ранее из консоли число Как запустить программу из консоли без блокировки консоли? Вызов консоли для другой вкладки из консоли js Клавиши F1-F12 в консоли, и работа с мышкой в консоли Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |