Как я могу изменить шрифт консоли? - PullRequest
4 голосов
/ 11 июля 2010

У меня проблема с выводом Unicode в консоли Windows XP.(Microsoft Windows XP [Версия 5.1.2600]) Первый код таков (из http://www.siao2.com/2008/03/18/8306597.aspx)


#include 
#include 
#include 

int main(void) {
    _setmode(_fileno(stdout), _O_U16TEXT);
    wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n");
    wprintf(L"èéøÞǽлљΣæča\n");
    wprintf(L"ぐႢ\n");
    wprintf(L"\x3050\x10a0\n");
    return 0;
}

Моя кодовая страница 65001 (CP_UTF8). Кроме Ⴂ, каждая буква выглядит хорошо. Но Ⴂвыглядит как квадратный. Стандартный шрифт консоли 'Lucida Console' не имеет шрифта для этой буквы. Итак, я скачал какой-то другой шрифт, который может отображаться правильно, но я не могу изменить (консольный проект Visual Studio 2005).

Я изменил HKEY_CURRENT_USER \ Console \% SystemRoot% _system32_cmd.exe \ FontName, но когда я проверяю свойства подсказки -> Шрифт, он устанавливается как «Lucida Console». Есть ли способ изменить шрифт консоли с помощью API?

Следующий код - это то, что я пробовал. Но он не работает. Справка.

#include "stdafx.h"
#include "Windows.h"
#include 

using namespace std;

// Conventional wisdom is retarded, aka What the @#%&* is _O_U16TEXT?
// http://www.siao2.com/2008/03/18/8306597.aspx
int main() {
    locale::global(locale(""));

    // Windows Command Prompt use code page 850,
    // probably for backwards compatibility with old DOS programs. 
    // Unicode at the Windows command prompt (C++; .Net; Java)
    // http://illegalargumentexception.blogspot.com/2009/04/i18n-unicode-at-windows-command-prompt.html

    // INFO: SetConsoleOutputCP Only Effective with Unicode Fonts
    // http://support.microsoft.com/kb/99795

    // Undocumented API : SetConsoleFont 
    // http://cboard.cprogramming.com/windows-programming/102187-console-font-size.html
    typedef BOOL (WINAPI *FN_SETCONSOLEFONT)(HANDLE, DWORD);
    FN_SETCONSOLEFONT SetConsoleFont;
    HMODULE hm = GetModuleHandle(_T("KERNEL32.DLL"));
    SetConsoleFont = (FN_SETCONSOLEFONT) GetProcAddress(hm, "SetConsoleFont");
    int fontIndex = 10; // 10 is known to identify Lucida Console (a Unicode font)
    BOOL bRet = SetConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), fontIndex);

    // /1037060/ispolzovanie-shrifta-unicode-v-konsolnom-prilozhenii-c
    //const UINT codePage = CP_UTF8;    //
    const UINT codePage = 1200;     // 1200(utf-16 Unicode) 
    SetConsoleOutputCP(codePage);

    wchar_t s[] = L"èéøÞǽлљΣæča\n";
    int bufferSize = WideCharToMultiByte(codePage, 0, s, -1, NULL, 0, NULL, NULL);
    char* m = new char[bufferSize]; 
    WideCharToMultiByte(codePage, 0, s, -1, m, bufferSize, NULL, NULL);
    // 0x00000459 "No mapping for the Unicode character exists in the target multi-byte code page."
    wprintf(L"%S", m);  // it doesn't work
    wprintf(L"%s", s);  // it work a bit

    // after L'Ⴂ' letter, wcout failed!
    wcout 

PS: Кстати, когда я помещаю «include » в «тег кода»,часть с in <> (fcntl.h) исчезла. Как я могу указать включение системы?

1 Ответ

2 голосов
/ 11 июля 2010

Нашел эти инструкции через Google здесь:http://keznews.com/3308_Adding_fonts_to_cmd_exe

По умолчанию свойства в окне cmd.exe позволяют выбрать либо растровые шрифты, либо Lucida Console.Вы можете добавить другие моноширинные шрифты в список через реестр.

В regedit перейдите к

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ Console\TrueTypeFont

Обратите внимание, что Lucida Console уже находится под этим ключом с помощьюимя «0».

Добавьте новое значение sting с именем «00» (да, это обязательное имя) и задайте для данных имя моноширинного шрифта, уже установленного в C: \ WindowsПапка \ Fonts.В этом примере я добавил шрифт Consolas.Кажется, что для дополнительных записей требуются имена «000», «0000» и т. Д. Такие имена, как «1» и «2», не работают.Ради бога, почему?

Откройте новое окно cmd, щелкните правой кнопкой мыши по системному меню и выберите «Свойства |Шрифт и есть недавно добавленный шрифт.

Я сделал это, потому что я хотел более читаемый шрифт для своего окна PowerShell, так как я тратил некоторое время на его изучение.

source:ferncrk.com

Я следовал инструкциям и сделал Consolas моим шрифтом по умолчанию для cmd.Он работал как ожидалось.

Обратите внимание, что он будет принимать только моноширинные шрифты.

...