печатаем русские буквы в текстовой консоли windows

Предыдущая тема Следующая тема Перейти вниз

печатаем русские буквы в текстовой консоли windows

Сообщение  electrik в Пн Окт 08, 2012 11:29 pm

когда-то на этом форуме обсуждалась проблема вывода русских букв в консоль windows.
я хотел найти эту тему и посмотреть решон ли вопрос. поисковик тут странно работает. просто под руки попалось, решил поделиться.
ладно, мой вариант.

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

#include "windows.bi"
' выясним текущую кодовую страницу ввода консоли
print "console code page is "; GetConsoleCP()

' получим кодовую страницу вывода данных  консоли
print "console output code page is ";GetConsoleOutputCP()

' установим текущую кодовую страницу ввода консоли
SetConsoleCP(1251)

' установим кодовую страницу вывода данных консоли
SetConsoleOutputCP(1251)

' напечатаем русский текст в кодировке 1251
print "ты крут! по-русски в консоли кодировкой 1251 пишешь."
sleep
исходник сохраняем в кодировке 1251

почитать можно:
http://vsokovikov.narod.ru/New_MSDN_API/Console/fn_setconsolecp.htm
от туда будут переходы на другие функции.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: печатаем русские буквы в текстовой консоли windows

Сообщение  DEPOzit в Вт Окт 09, 2012 8:07 pm

Тема поднималась в этой ветке, только всеже там шла речь про графический режим.
А по поводу твоего примера - у меня что-то все-равно выводятся кракозябры Sad

DEPOzit

Сообщения : 113
Дата регистрации : 2008-05-15
Возраст : 35
Откуда : Смоленская обл.

Посмотреть профиль http://freebasic.ru/

Вернуться к началу Перейти вниз

Re: печатаем русские буквы в текстовой консоли windows

Сообщение  electrik в Вт Окт 09, 2012 8:50 pm

опа, правда. вообще странный глюк.
просто я пользуюсь читалкой экрана, а ей видимо пофиг, она нормально читает.
блин, хреново. а ведь api есть, для чего тогда? ладно могло в windows xp глючить, дык в семерке та же фигня.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: печатаем русские буквы в текстовой консоли windows

Сообщение  trew в Ср Окт 10, 2012 5:30 am

Да не каких глюков нет, меняйте шрифт в свойствах консоли на тот, что поддерживает кириллицу. Я уже писал об этом ЗДЕСЬ

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: печатаем русские буквы в текстовой консоли windows

Сообщение  Замабувараев в Пн Фев 15, 2016 1:18 am

Пожалуйста, не делайте всяких конвертаций в 1251.
Оператор Print нормально работает с юникодными строками типа WString.
avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 33
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: печатаем русские буквы в текстовой консоли windows

Сообщение  Somerick в Чт Июл 21, 2016 5:59 pm

Всем привет! Смотрю это FB сообщество немногочисленное, а жаль
Тоже возился некогда с кодировкой
Вот способ. Не судите строго. Для экспериментаторов, новичков, для своих мелких непрофессиональных программ, у кого устаревшие системы
Не надо юникода, не надо шрифты менять, ничего такого. На стандартных установках ХР 32-бит работает.
Первый параметр указатель на строку, второй не обязательный, если задать ноль то не переходит на новую строку.


Код:

#Include Once"windows.bi"

Sub RUSPrint(s As zString Ptr,newline As Long=1)
Dim As ZString*10000 t=Any
Dim As Long x=Any,c=Any,e

If s Then 'проверка что указатель<>0, не нужна если вы уверены что передаёте правильный параметр

'собственно конвертация кодировки
Do
For x=0 To 9996
c=Peek(s)
Select Case c
Case Is>239:c-=16
Case Is>191:c-=64
Case 168:c=240
Case 184:c=241
Case 0:If newline Then Poke word,@t[x],2573:x+=2 'завершение строки CRLF
e=1:Exit For
End Select
t[x]=c
s+=1
Next
t[x]=0

'обычный WinAPI "Print"
WriteConsole GetStdHandle(-11),@t,x,@c,0
Loop Until e
EndIf
End Sub




'Примеры использования. Варианты типа первого параметра, FB сам передаёт в всех случаях zString Ptr:

RUSPrint "Русские буквы OK!" 'просто строка

Dim As zString*20 s="abcDEF абвГДЕ"
RUSPrint s 'переменная обычный символьный массив

Dim As String st
st="qwErTy йцУкЕн 1234567890+-=\/.,_()"
RUSPrint st 'переменная тип с динамически выделяемой памятью


Sleep 'конец программы, ожидание нажатия кнопки, закрытия консоли

Somerick

Сообщения : 1
Дата регистрации : 2016-07-21

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: печатаем русские буквы в текстовой консоли windows

Сообщение  TQPO в Чт Июл 28, 2016 1:25 pm

Somerick
Замабувараев прав, вот
Так
Код:

? WStr("русский")
Sleep
несколько проще

А вообще никогда не понимал, что это за проблема - выводить кириллицу. Где это нужно в реальных программах?
Сроду с такой задачей не сталкивался.

А вот, например, вывод полноценого юникода в гуи - да. Сейчас любой браузер, плеер, текстовый редактор и т.д. должен отображать те же иероглифы, иначе программа будет конкурентоспособна.

TQPO

Сообщения : 4
Дата регистрации : 2014-04-24

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: печатаем русские буквы в текстовой консоли windows

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения