Codepage not found in keyboard definition file 866 при обновлении bios
I'm using a recent version of windows 10. When I tried to run client expample code from boost asio and got an expected exception on this line:
It outputs hieroglyphs on console :
Default codepage of my console is 866 because i'm using russian windows. So then I changed a codepage to 1251 via
message looks fine:
I'm just curious is there any workaround to this without any manipulations with chcp?
Workaround: Stop using the C++ I/O streams library, and use the Unicode version of WriteConsole. And stop using libraries that believe ANSI encoding to solve any problem.
This question is a lot less common than it should be. The text is generated by FormatMessage(), experiment with it the way you see it being used in Boost. The error code is 10061. Beware of BOOST_NO_ANSI_APIS.
1 Answer 1
If you want to do it from C++ code then use SetConsoleOutputCP for it.
That's only half of the solution. You're also going to have to make sure, that the locale used by the ASIO library, and the locale used by the C++ I/O streams match the respective code page. Arguably, it's just a lot easier to not rely on ANSI encoding at all.
Since exception::what returns char* that is likely provided by OP, there is of course possible to use SetConsoleOutputCP(CP_OEMCP) then MultiByteToWideChar and then std::wcerr to support most unicode, but I got impression that what was needed was just Windows Cyrillic code page 1251.
Correct. Until that code runs on some else's machine. And then you have to make sure that all 3 parties agree on the same code page as well. This will inevitably break. This is an issue that should be raised with the ASIO library authors: Don't try to localize exception messages. You only have ASCII at your disposal. Unless you want to make your users suffer.
So to convert message to unicode I should somehow determine what ascii codepage uses asio then translate message to wchar_t via winapi function and then output it to console via widechar version of output stream?
@alexfsx: Well, no. Talk to the ASIO library authors, and let them know, that exception messages are not user-facing, and should not be localized. Have them give you ASCII text, in plain English, and you will not have to deal with console codepages, locales, or conversions.
На компе стоит русскоязычный MS DOS.
При помощи проги Rescue сделал "спасательный диск". Чтобы проверить его функциональность загрузился с него. Прочитать ничего невозможно - абракадабра какая-то. Дело ясное: "па-руски нипанимай".
Влез в него - в его составе оказались файлы Autoexec.bat и Config.sys (кстати, он и при загрузке отчитывается Starting MS DOS).
Но в этих файлах следующее:
Autoexec.bat:
C:\Dos\Smartdrv.exe /X
@Echo Off
Prompt $p$g
Path C:\Dos
Mode Con Codepage Prepare=((866) C:\Dos\Ega.cpi)
Chcp 866
Keyb Ru,,C:\Dos\Keyboard.sys
Device=C:\Dos\Setver.exe
Device=C:\Dos\Himem.sys
Dos=High
Country=007,,C:\Dos\Display.sys Con=(Ega,,1)
Install=C:\Dos\Nlsfunc.exe C:\Dos\Country.sys
Files=30
Только что провел следующий эксперимент. Оставил в покое Rescue-диск.
Сообразил системный диск командой Format a: /s.
На диске оказалось только ядро и, почему-то, скрытый Drvspace.bin.
Дополнил, скопировав по-тупому с С:, файлами конфигурации. Затем из них повыкидывал все лишнее, не относящееся к "русификации". Грузился комп с диска исправно, черпая необходимые файлы с С:.
Исключение составило удаление из Autexec.bat строки Path, что мне кажется странным (если обратите внимание на предыдущие посты, то увидите, что все адреса прописаны полностью, а значит и указывать адреса обращений отдельно большого смысла нет, потому и показалось странным). Вернул я эту строку на место.
Далее я сделал следующее.
Просмотрел в конфигурационных файлах к каким файлам они обращаются и перенес их на диск А:, предварительно, в приступе кретинизма создав для них папку A:\DOS, ну чтоб уж полностью повторить структуру на С:.
Соответственно, изменил все существующие адреса указаний и обращений на A:\DOS.
Что вы думаете? Не сработало! Что за фигня?
Либо файлы, к которым он обращается, сами обращаются еще к каким-то файлам (каким?), либо файлы установки кодовых страниц должны инсталлироваться в конкретную систему под конкретное железо (как в современных ОСях). Сразу возникает попутный вопрос: для этого же необходимо наличие какого-никакого реестра. (((
Какие могут быть предположения по этому поводу?
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.
а также скопировал недостающие Ega.cpi, Keyboard.sys, Country.sys, Display.sys, Nlsfunc.exe в корневик диска. |
-------
- Пал Андреич, Вы шпион?
- Видишь ли, Юра.
Огромное вам спасибо!
По русски заговорил, но при загрузке (в конце) сообщал об ошибке.
В пошаговом режиме загрузки выяснил, что сбой дает команда
На компе стоит русскоязычный MS DOS.
При помощи проги Rescue сделал "спасательный диск". Чтобы проверить его функциональность загрузился с него. Прочитать ничего невозможно - абракадабра какая-то. Дело ясное: "па-руски нипанимай".
Влез в него - в его составе оказались файлы Autoexec.bat и Config.sys (кстати, он и при загрузке отчитывается Starting MS DOS).
Но в этих файлах следующее:
Autoexec.bat:
C:\Dos\Smartdrv.exe /X
@Echo Off
Prompt $p$g
Path C:\Dos
Mode Con Codepage Prepare=((866) C:\Dos\Ega.cpi)
Chcp 866
Keyb Ru,,C:\Dos\Keyboard.sys
Device=C:\Dos\Setver.exe
Device=C:\Dos\Himem.sys
Dos=High
Country=007,,C:\Dos\Display.sys Con=(Ega,,1)
Install=C:\Dos\Nlsfunc.exe C:\Dos\Country.sys
Files=30
Только что провел следующий эксперимент. Оставил в покое Rescue-диск.
Сообразил системный диск командой Format a: /s.
На диске оказалось только ядро и, почему-то, скрытый Drvspace.bin.
Дополнил, скопировав по-тупому с С:, файлами конфигурации. Затем из них повыкидывал все лишнее, не относящееся к "русификации". Грузился комп с диска исправно, черпая необходимые файлы с С:.
Исключение составило удаление из Autexec.bat строки Path, что мне кажется странным (если обратите внимание на предыдущие посты, то увидите, что все адреса прописаны полностью, а значит и указывать адреса обращений отдельно большого смысла нет, потому и показалось странным). Вернул я эту строку на место.
Далее я сделал следующее.
Просмотрел в конфигурационных файлах к каким файлам они обращаются и перенес их на диск А:, предварительно, в приступе кретинизма создав для них папку A:\DOS, ну чтоб уж полностью повторить структуру на С:.
Соответственно, изменил все существующие адреса указаний и обращений на A:\DOS.
Что вы думаете? Не сработало! Что за фигня?
Либо файлы, к которым он обращается, сами обращаются еще к каким-то файлам (каким?), либо файлы установки кодовых страниц должны инсталлироваться в конкретную систему под конкретное железо (как в современных ОСях). Сразу возникает попутный вопрос: для этого же необходимо наличие какого-никакого реестра. (((
Какие могут быть предположения по этому поводу?
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.
а также скопировал недостающие Ega.cpi, Keyboard.sys, Country.sys, Display.sys, Nlsfunc.exe в корневик диска. |
-------
- Пал Андреич, Вы шпион?
- Видишь ли, Юра.
Огромное вам спасибо!
По русски заговорил, но при загрузке (в конце) сообщал об ошибке.
В пошаговом режиме загрузки выяснил, что сбой дает команда
На компе стоит русскоязычный MS DOS.
При помощи проги Rescue сделал "спасательный диск". Чтобы проверить его функциональность загрузился с него. Прочитать ничего невозможно - абракадабра какая-то. Дело ясное: "па-руски нипанимай".
Влез в него - в его составе оказались файлы Autoexec.bat и Config.sys (кстати, он и при загрузке отчитывается Starting MS DOS).
Но в этих файлах следующее:
Autoexec.bat:
C:\Dos\Smartdrv.exe /X
@Echo Off
Prompt $p$g
Path C:\Dos
Mode Con Codepage Prepare=((866) C:\Dos\Ega.cpi)
Chcp 866
Keyb Ru,,C:\Dos\Keyboard.sys
Device=C:\Dos\Setver.exe
Device=C:\Dos\Himem.sys
Dos=High
Country=007,,C:\Dos\Display.sys Con=(Ega,,1)
Install=C:\Dos\Nlsfunc.exe C:\Dos\Country.sys
Files=30
Только что провел следующий эксперимент. Оставил в покое Rescue-диск.
Сообразил системный диск командой Format a: /s.
На диске оказалось только ядро и, почему-то, скрытый Drvspace.bin.
Дополнил, скопировав по-тупому с С:, файлами конфигурации. Затем из них повыкидывал все лишнее, не относящееся к "русификации". Грузился комп с диска исправно, черпая необходимые файлы с С:.
Исключение составило удаление из Autexec.bat строки Path, что мне кажется странным (если обратите внимание на предыдущие посты, то увидите, что все адреса прописаны полностью, а значит и указывать адреса обращений отдельно большого смысла нет, потому и показалось странным). Вернул я эту строку на место.
Далее я сделал следующее.
Просмотрел в конфигурационных файлах к каким файлам они обращаются и перенес их на диск А:, предварительно, в приступе кретинизма создав для них папку A:\DOS, ну чтоб уж полностью повторить структуру на С:.
Соответственно, изменил все существующие адреса указаний и обращений на A:\DOS.
Что вы думаете? Не сработало! Что за фигня?
Либо файлы, к которым он обращается, сами обращаются еще к каким-то файлам (каким?), либо файлы установки кодовых страниц должны инсталлироваться в конкретную систему под конкретное железо (как в современных ОСях). Сразу возникает попутный вопрос: для этого же необходимо наличие какого-никакого реестра. (((
Какие могут быть предположения по этому поводу?
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.
а также скопировал недостающие Ega.cpi, Keyboard.sys, Country.sys, Display.sys, Nlsfunc.exe в корневик диска. |
-------
- Пал Андреич, Вы шпион?
- Видишь ли, Юра.
Огромное вам спасибо!
По русски заговорил, но при загрузке (в конце) сообщал об ошибке.
В пошаговом режиме загрузки выяснил, что сбой дает команда
На компе стоит русскоязычный MS DOS.
При помощи проги Rescue сделал "спасательный диск". Чтобы проверить его функциональность загрузился с него. Прочитать ничего невозможно - абракадабра какая-то. Дело ясное: "па-руски нипанимай".
Влез в него - в его составе оказались файлы Autoexec.bat и Config.sys (кстати, он и при загрузке отчитывается Starting MS DOS).
Но в этих файлах следующее:
Autoexec.bat:
C:\Dos\Smartdrv.exe /X
@Echo Off
Prompt $p$g
Path C:\Dos
Mode Con Codepage Prepare=((866) C:\Dos\Ega.cpi)
Chcp 866
Keyb Ru,,C:\Dos\Keyboard.sys
Device=C:\Dos\Setver.exe
Device=C:\Dos\Himem.sys
Dos=High
Country=007,,C:\Dos\Display.sys Con=(Ega,,1)
Install=C:\Dos\Nlsfunc.exe C:\Dos\Country.sys
Files=30
Так сама система-то (на винте) именно с такой редакцией как я написал и функционирует. Без каких либо б.
Базаров,Ну незнаю.. Когда я досом пользовался у меня в батнике именно этими коммандами кодовая страница загружалась. Насчет конфига точно не помню, а вот в батнике уверен.
Да, елки-палки! Заменил в бате строчку chcp 866 на mode con cp sel=866 - ваще три раза сказал Bad command!(((
Только что провел следующий эксперимент. Оставил в покое Rescue-диск.
Сообразил системный диск командой Format a: /s.
На диске оказалось только ядро и, почему-то, скрытый Drvspace.bin.
Дополнил, скопировав по-тупому с С:, файлами конфигурации. Затем из них повыкидывал все лишнее, не относящееся к "русификации". Грузился комп с диска исправно, черпая необходимые файлы с С:.
Исключение составило удаление из Autexec.bat строки Path, что мне кажется странным (если обратите внимание на предыдущие посты, то увидите, что все адреса прописаны полностью, а значит и указывать адреса обращений отдельно большого смысла нет, потому и показалось странным). Вернул я эту строку на место.
Далее я сделал следующее.
Просмотрел в конфигурационных файлах к каким файлам они обращаются и перенес их на диск А:, предварительно, в приступе кретинизма создав для них папку A:\DOS, ну чтоб уж полностью повторить структуру на С:.
Соответственно, изменил все существующие адреса указаний и обращений на A:\DOS.
Что вы думаете? Не сработало! Что за фигня?
Либо файлы, к которым он обращается, сами обращаются еще к каким-то файлам (каким?), либо файлы установки кодовых страниц должны инсталлироваться в конкретную систему под конкретное железо (как в современных ОСях). Сразу возникает попутный вопрос: для этого же необходимо наличие какого-никакого реестра. (((
Какие могут быть предположения по этому поводу?
Текущее время: 04:41 . Часовой пояс GMT +4. Powered by vBulletin® Version 5.8.9
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Читайте также: