LINUX.ORG.RU

Подскажите, пожалуйста, кроссплатформенное решение проблемы русского ввода и русского вывода на c++?

 ,


0

2

Суть в том чтобы если пользователь ввёл строку, то её можно было корректно вывести ему обратно и ещё чтобы если в программе была проинициализирована строка, содержащая русские буквы, то чтобы и её можно было также корректно вывести. И как это всё заставить работать в кодировке ASCII?



Последнее исправление: blbulyandavbulyan (всего исправлений: 1)

Чтобы корректно вывести национальный текст в линуксе, тебе достаточно узнать текущую локаль. В венде же тебе как минимум придётся полазать по реестру в места типа HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage (а вдруг там CP20866), да ещё и в разных местах, а как максимум - шрифты парсить, чтобы понять в каком таки есть нужные символы, и какой надо в гуе использовать. С консолью вообще жопа полная и бардак. Способа гарантированно узнать какой текущий шрифт и какая кодировка сейчас у консоли вообще нету. Get/SetConsoleOutputCP поможет постольку-поскольку, ибо шрифт может вообще не иметь нужных символов.

Так что ничего кроссплатформенного у тебя не получится по определению.

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

Чтобы корректно вывести национальный текст в линуксе, тебе достаточно узнать текущую локаль.

Get/SetConsoleOutputCP поможет постольку-поскольку, ибо шрифт может вообще не иметь нужных символов.

По такой логике и в Линуксе консольный шрифт может вообще не иметь нужных символов.

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

По такой логике и в Линуксе консольный шрифт может вообще не иметь нужных символов.

В линуксе нынче уже нет неюникодных шрифтов. В венде же дефолтный консольный - нифига не юникодный, а однобайтовый. Может конечно в дисяточке добавили, я х.з.

Stanson ★★★★★
()

В ASCII русских букв нет по определению.

Тебе здесь уже советовали Qt, точнее, QtCore (это часть Qt, не зависящая от GUI). Вполне рабочее решение.

Кроме того, в C++11 и C++14, насколько я помню, была значительно улучшена работа с локалями и различными кодировками, странно, что про это никто не вспомнил. (Я, правда, продолжаю сидеть на кутешных средствах, ибо в моих проектах от куте не только ядро.)

hobbit ★★★★★
()

cin / cout А то, что cmd.exe по умолчанию не выводит юникод - проблемы cmd.exe

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

была значительно улучшена работа с локалями и различными кодировками

К сожалению, не заметно.

Вообще, что касается работы с текстом, а не с массивом char, стандартный C++ вызывает только БОЛЬ.

Uter
()
Ответ на: комментарий от hobbit

Кроме того, в C++11 и C++14, насколько я помню, была значительно улучшена работа с локалями и различными кодировками

xD

clang об этом не слышал,таже как и msvs

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

clang об этом не слышал,таже как и msvs

А gcc и MinGW?

(Я, если что, дальше чтения статеек на хабре на эту тему не продвинулся, мне кутешных строк пока хватает. Но зарубку на мозгах сделал, ибо надо будет попробовать вернуться к std-шным.)

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

с сишных строках ничего не изменилось с 1997(или 87(или 77)), они как были неюзабельным г-внищем так и остались

qstring тоже ниразу не спасение, как и любая «левая либа»
как только возникнет необходимость «передавать строки» с любой другой левой либой, которая может только в char
опять будет ад и страдания по конвертированию в <понятный той либе формат char>
а уж если нидай бох у тебя char двухбайтный(как в msvs) то земля тебе пухом и всему твоему qstring

если уж и писать на QT,то только QML

missxu
()
Ответ на: комментарий от hobbit

Нет там никаких улучшений(а небольшие доработки deprecated уже в c++17)

Deleted
()
Ответ на: комментарий от hateyoufeel

Скорее уж:

взять Qt и страдать.

Но вариантов всё равно нет. Если не культи, то всё равно какую-то либу навешивать придётся.

Вся проблема именно в кроссплатформенности, в каком-нибудь cmd.exe без костылей уже никак.

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

Комменты не на английском пишут только начинающие быдлокодеры и те, кому насрать на окружающих. Если хочется, чтобы увидев твой код люди не начали тебя материть на чем свет стоит, а сказали спасибо, воспользовавшись кусками твоего кода, комментарии надо делать на английском.

Тот, кто может обматерить, прекрасно прочтёт и на русском, чучелко.

И вообще, в исходных кодах не должно быть символов, выходящих за пределы таблицы ASCII.

Кому не должно?

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