2010-07-11 2 views
4

У меня проблема с выходом 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). Excep გ, каждое письмо выглядит хорошо. Но გ выглядит квадратным. Консоль по умолчанию шрифт 'Lucida Console' не имеет шрифта для этой буквы. Итак, я загрузил другой шрифт, который может отображать გ, но я не могу изменить (Visual Studio 2005) консольный шрифт.

Я изменил HKEY_CURRENT_USER \ Console \% SystemRoot% _system32_cmd.exe \ FontName, но когда я проверяю свойства Prompt -> Font, он устанавливается как «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); 

    // http://stackoverflow.com/questions/1922294/using-unicode-font-in-c-console-app 
    //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: Кстати, когда я ставлю "включить < fcntl.h>" в "кодовой метки", часть с в <> (fcntl.h) исчез. Как включить систему?

+0

SetConsoleOutputCP (1200) возвращает false, потому что не принимается в качестве действительной кодовой страницы 1200. – carlos

ответ

2

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

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

В смерзаться, перейдите к

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

Обратите внимание, что Lucida консоль уже под этим ключом с именем "0".

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

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

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

источник: ferncrk.com

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

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

+0

Спасибо за изменение шрифта. Но я не могу найти шрифт с фиксированным шагом юникода, который может отображать L 'გ' (x10a0). Lucida Console отображает его как []. –

+0

Я нашел шрифт под названием Everson Mono с грузинской поддержкой, но по какой-то причине cmd молча отвергает его. – Gunslinger47

+0

Возможно, вам повезло больше, чем на superuser.com. Это не проблема программирования, а проблема с вашей конфигурацией Windows. – Gunslinger47

 Смежные вопросы

  • Нет связанных вопросов^_^