Вывод текста в окна
|
|
ruddy | Дата: Воскресенье, 23.09.2012, 14:31 | Сообщение # 1 |
Сержант
Группа: Заблокированные
Сообщений: 30
Статус: Offline
| Друзья, простите, но хочу продолжить уже закрытую тему (CodePage), правда совсем по другому поводу. Ниже листинг программы в кодировке Windows-1251: #Include "windows.bi" Dim WinString As String ' исходная строка Windows Cyrillic Dim DosString As String ' получаемая строка MS-DOS Cyrillic Dim Code As Integer ' код завершения WinString = " Кодировка Windows-1251 " ' исходная строка DosString = Space$(Len(WinString)) ' подготовка результата Screen 0 ' нормальное текстовое окно ' вывод в него дает вполне ожидаемый результат! 'Screen 11 ' нормальное графическое окно ' вывод в него дает несколько неожиданный результат! Code = CharToOem(WinString, DosString) ' перекодировка строки Print " End_Code = "; Code ' для обоих окон - 1 Print WinString Print DosString Sleep ' Вопрос: в какой кодировке выводится текст в графическое окно ' из строк WinString и DosString? Какой параметр управляет? Большое спасибо!
|
|
| |
ShadEx | Дата: Воскресенье, 23.09.2012, 21:28 | Сообщение # 2 |
Лейтенант
Группа: Проверенные
Сообщений: 51
Статус: Offline
| Сдается мне, что в режиме графического окна текст нужно конвертировать в юникод или ютф-8, но это еще может зависеть от настроек ОС.
Code #if __FB_DEBUG__ <> 0 Shell "chcp 1251" 'win-1251 #else Shell "chcp 65536" 'unicode #EndIf
Попробуйте в начале вставить этот код, он автоматически в режиме отладки в консоли будет выводить текст в вин-1251, а без отладки - в юникоде
Сообщение отредактировал ShadEx - Воскресенье, 23.09.2012, 21:29 |
|
| |
haav | Дата: Понедельник, 24.09.2012, 07:14 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| В графическом экране нет возможности использовать кодировку UNICODE. Об этом прямо заявлено было одним из разработчиков (dkl). Плюс так же сказано, что это заложено в планы на будующие версии. Что касается OEM , то по умолчанию судя по всему тоже облом. Или как ALBOM в своей либе подменять текущую кодовую страницу. Кстати его либа на новой версии компиля не катит. Я подправил ее, выложено будет на http://free-basic.ru/ сегодня.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
ruddy | Дата: Понедельник, 24.09.2012, 08:58 | Сообщение # 4 |
Сержант
Группа: Заблокированные
Сообщений: 30
Статус: Offline
| 1) Уважаемый ShadEx, дописал указанный кусочек: #Include "windows.bi" #if __FB_DEBUG__ <> 0 Shell "chcp 1251" 'Win-1251 #else Shell "chcp 65001" ' Unicode (UTF-8) ' Shell "chcp 65536" – указана недопустимая кодовая страница! #EndIf но, к сожалению, ожидаемого результата не получил! ...только начало портится консольное текстовое окно...
2) Уважаемый haav, обидно, если на графическом экране нет возможности использовать кодировку UNICODE – ради чего тогда все затевалось? Если не затруднит, укажите, пожалуйста, ссылку на источник...
|
|
| |
haav | Дата: Понедельник, 24.09.2012, 09:23 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Quote (ruddy) Если не затруднит, укажите, пожалуйста, ссылку на источник...
http://www.freebasic.net/forum....p176224
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
ruddy | Дата: Понедельник, 24.09.2012, 10:40 | Сообщение # 6 |
Сержант
Группа: Заблокированные
Сообщений: 30
Статус: Offline
| Re: Input bug ? by dkl » Jun 22, 2012 19:27 Для меня понять это будет сложно, но раз VANYA из Ярославля поблагодарил, то, наверное, сказано правильно! Стас и Вам большое спасибо! Понимаю, что свои проблемы я должен обсуждать с людьми "своего круга", а не соваться к профи :-)Добавлено (24.09.2012, 10:40) --------------------------------------------- Сижу вот и думаю, а с чего все вдруг решили, что текст в графическое окно выводится в кодировке Unicode (UTF-8)? Не скрою, и мне так кажется! Но сейчас я хочу выводить текст в графическое окно исключительно в кодировке ANSI (Windows-1251) и в кодировке OEM (CP866). Должен же быть параметр оператора Screen для управления выводом...
|
|
| |
ShadEx | Дата: Вторник, 25.09.2012, 20:28 | Сообщение # 7 |
Лейтенант
Группа: Проверенные
Сообщений: 51
Статус: Offline
| Quote ' Shell "chcp 65536" – указана недопустимая кодовая страница!
Извиняюсь, в тот момент держал в уме размер WORD - вот и написал глупость
Quote Но сейчас я хочу выводить текст в графическое окно исключительно в кодировке ANSI (Windows-1251) и в кодировке OEM (CP866). Должен же быть параметр оператора Screen для управления выводом...
Ну вам же сказали, что пока это не осуществимо, но если вам нужно только выводить текст, то подключайте библиотеку Станислава и создавайте окно с окрашенным в чёрный цвет EditorGadget на весь размер окна - и просто выводите текст в гаджет в Win-1251 или CP866.
|
|
| |
ruddy | Дата: Среда, 26.09.2012, 09:14 | Сообщение # 8 |
Сержант
Группа: Заблокированные
Сообщений: 30
Статус: Offline
| Ну, уважаемый ShadEx, не знаю, что такое "гаджет", но спрошу: а в какой кодировке позволено "штатно" (средствами FreeBASIC) выводить "просто текст" в открытое прикладной программой "обычное графическое окно", например, Screen 11? Ранее мне сказали, что "в графическом экране нет возможности использовать кодировку UNICODE. Об этом прямо заявлено было одним из разработчиков"... Так теперь Вы утверждаете, что нельзя и в кодировке ANSI (Windows-1251), и в кодировке OEM (CP866). Наверное, я не совсем точно выражаюсь – простите!
|
|
| |
}{oma6bI4 | Дата: Среда, 26.09.2012, 16:02 | Сообщение # 9 |
Рядовой
Группа: Пользователи
Сообщений: 8
Статус: Offline
| В графическом окне FB'а по умолчанию нет ни 866 ни 1251, там вообще нет русского языка. Для того чтобы русские буквы появились необходимо дополнительно их загрузить, например с помощью Albom_font, или как у меня из отдельного файла: http://cmapuk-xoma6bi4.narod.ru/files/chargen-0.7.7z
Сообщение отредактировал }{oma6bI4 - Среда, 26.09.2012, 16:07 |
|
| |
ruddy | Дата: Среда, 26.09.2012, 16:28 | Сообщение # 10 |
Сержант
Группа: Заблокированные
Сообщений: 30
Статус: Offline
| Уважаемый }{oma6bI4, могу согласиться, что используемый набор символов не содержит русских букв – такое бывает :-) Но скажите, пожалуйста, номер используемой на графическом экране кодировки? Они же все стандартизированы...
|
|
| |
}{oma6bI4 | Дата: Среда, 26.09.2012, 16:38 | Сообщение # 11 |
Рядовой
Группа: Пользователи
Сообщений: 8
Статус: Offline
| Смысл в понятии "номере кодировки" появится после загрузки шрифта с набором символов в кокой либо кодировки. Т.е. номер кодировки будет определятся именно выбором шрифта. Кроме того, Вам ничто не мешает расположить символы в любом удобном Вам порядке, и на любые позиции, тем самым получив свою собственную кодировку.
|
|
| |
ruddy | Дата: Среда, 26.09.2012, 16:52 | Сообщение # 12 |
Сержант
Группа: Заблокированные
Сообщений: 30
Статус: Offline
| По серости своей полагал, что "ихние" разработчики придерживаются "основополагающего" документа: http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx в котором, например, есть следующие кодировки: Code Page Identifiers 866 cp866 OEM Russian; Cyrillic (DOS) 1251 windows-1251 ANSI Cyrillic; Cyrillic (Windows) 20866 koi8-r Russian (KOI8-R); Cyrillic (KOI8-R) 28595 iso-8859-5 ISO 8859-5 Cyrillic 65001 utf-8 Unicode (UTF-8) Я ошибался?Добавлено (26.09.2012, 16:52) --------------------------------------------- Работаю под Windows XP (SP3), использую сборку c оболочкой IDE FbEdit v.1.0.7.6c с компилятором FreeBASIC v.0.22.0. Ничего не трогаю!!!
|
|
| |
}{oma6bI4 | Дата: Среда, 26.09.2012, 16:55 | Сообщение # 13 |
Рядовой
Группа: Пользователи
Сообщений: 8
Статус: Offline
| Если я не ошибаюсь то в графическом окне FB'а кодировка ASCII. В которой русского (Cyrillic) нет по определению.
|
|
| |
ruddy | Дата: Среда, 26.09.2012, 17:05 | Сообщение # 14 |
Сержант
Группа: Заблокированные
Сообщений: 30
Статус: Offline
| Думаю, что Вы ошибаетесь! Я не крутой специалист (и вообще не специалист в системном программировании), но зрительно символы сильно отличаются от принятых в ASCII. Вот мой адрес – eugene_r@mail.ru - в случае необходимости вышлю картинки экранов с наблюдаемыми строками символов для Screen0 и Screen11.
|
|
| |
ShadEx | Дата: Среда, 26.09.2012, 22:23 | Сообщение # 15 |
Лейтенант
Группа: Проверенные
Сообщений: 51
Статус: Offline
| Quote а в какой кодировке позволено "штатно" (средствами FreeBASIC) выводить "просто текст" в открытое прикладной программой "обычное графическое окно", например, Screen 11?
Вы не сравнивайте Screen 0 и Screen 11 - это разные консоли, если пояснить кратко, то "Screen 0" - это просто "обертка" для станд. окна терминала в ОС, а "Screen 11" - это такой себе "простенький канвас", эмулирующий собой dos'овский терминал, поэтому там просто вывод осуществлятся по типу отрисовки растровых символов в одной кодировке, и как вы уже поняли - эта кодировка не win-1251 и даже не OEM-866, да и к тому же, как выяснилось по ссылке с офф. форума - поддержка юникода в граф. режиме "возможна только в будущих версиях".
Quote но зрительно символы сильно отличаются от принятых в ASCII.
Вот сейчас специально запустил ваш пример - у меня выводит греческие символы, но это ничего не значит, ведь главное, чтобы там правильно выводился латинский алфавит, а особенно все символы из французкого, ведь создатель FB родом из Франции
Quote По серости своей полагал, что "ихние" разработчики придерживаются "основополагающего" документа: http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx
"Ихние" разработчики больше придерживаются документов распространенных в среде *NIX, а там нативная однобайтная кодировка для русского - KOI8 (была раньше - сейчас по стандарту UTF-8), и на микрософт им по большому счёту начхать, так как у них главная задача - попасть в список офф. поддержки компилятором GCC. Насколько я понял - в начале своего развития FB задумывался, как среда портирования старых програм/игр с QBasic, и вот эта графическая консоль была создана для отрисовки той простенькой графики из игр "бородатого" прошлого... И так как в том же "бородатом" прошлом игры с русской локализацией можно было пересчитать по пальцам одной руки(да-да, чтоб поиграть в более-менее сложную игру - школьнику приходилось зубрить всемирный буржуйский диалект), да и русских фанатов Qbasic, у которых бы руки чесались портировать программы, написанные будучи еще в школьном возрасте, как мне думается, было очень немного, то соответсвенно о включении русских кодировок в отрисовку на графической консоли никто даже и не заморачивался.
Сообщение отредактировал ShadEx - Среда, 26.09.2012, 22:55 |
|
| |
|