2011-05-03 2 views
15

Недавно я получаю эту ошибку при использовании msysgit, в частности, когда есть некоторый контент, не ASCII генерируется выходным мерзавец:msysgit: предупреждение шрифта Unicode

предупреждение: Консоль шрифт, вероятно, не поддерживает Unicode. Если на выходе появляются странные символы, подумайте о переходе на TrueType-шрифт, например Lucida Console!

Самое смешное, что, хотя это сообщение говорит мне, что мой шрифт не поддерживает Unicode, он на самом деле делает, и данный текст отображается правильно (в правильном кодировании & все символы отображаются).

Печально то, что я не могу найти способ отключить это сообщение. Я попытался изменить шрифт в Git Bash (обычно я использую PowerShell), но когда я проверил шрифт там, я заметил, что он уже был установлен на Lucida Console, и предупреждение появляется в той же самой консоли. Поэтому я немного не понимаю, что делать, чтобы исправить это, или, по крайней мере, остановить msysgit от печати этого предупреждения все время.

Я попытался переустановить msysgit, также с выбранной опцией, которая должна установить шрифт в Lucida Console, но это не помогло. Что я могу сделать?

+1

Я только видел эту ошибку на 'git push', когда сервер возвращает какое-то странное сообщение об ошибке. Обратите внимание, что UTF8 находится в процессе поддержки: http://stackoverflow.com/questions/5854967/git-msysgit-accents-utf-8-the-definitive-answers/6043599#6043599 – VonC

+0

Это обычная проблема с бинарный распределенный win32 msysgit. Компиляция его сама и использование в сочетании с console2 решило эту проблему. – mbx

+0

@mbx С появлением проблемы я переустановил свой компьютер (не из-за этой проблемы), и проблема исчезла именно так. Точно так же он появился раньше, ничего не меняя в системе. – poke

ответ

0

Этот тест выполняется с помощью функции warn_if_raster_font в compat/winansi.c. Это использует Win32 API GetCurrentConsoleFontEx, чтобы найти шрифт, используемый консолью, подключенной к текущему потоку вывода. Этот тест всегда должен быть правильным в Windows Vista и выше. В Windows XP он должен искать в реестре текущий шрифт консоли по умолчанию. Так что, возможно, вы находитесь на XP, и когда вы настроили ярлык для используемой консоли, по умолчанию остается настроено использование шрифта, отличного от юникода.

Если нет, вы можете попробовать составить следующее, которое использует примерно тот же код и посмотреть, что он распечатывает. Если вывод содержит tt: 4, мы ожидаем, что соответствующий git-код будет правильно определять ваш шрифт консоли как truetype.

#define STRICT 
#define WINVER 0x0600 
#define _WIN32_WINNT 0x600 
#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
#include <tchar.h> 
#include <stdio.h> 

#ifdef __MINGW32__ 
typedef struct _CONSOLE_FONT_INFOEX { 
     ULONG cbSize; 
     DWORD nFont; 
     COORD dwFontSize; 
     UINT FontFamily; 
     UINT FontWeight; 
     WCHAR FaceName[LF_FACESIZE]; 
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX; 
#endif 

typedef BOOL (WINAPI *PGETCURRENTCONSOLEFONTEX)(HANDLE, BOOL, 
       PCONSOLE_FONT_INFOEX); 
int 
_tmain(int argc, TCHAR *argv[]) 
{ 
    PGETCURRENTCONSOLEFONTEX pgccf; 
    pgccf = (PGETCURRENTCONSOLEFONTEX) 
     GetProcAddress(GetModuleHandleW(L"kernel32.dll"), 
        "GetCurrentConsoleFontEx"); 
    if (pgccf == NULL) { 
     _tprintf(_T("error: failed to get function pointer\n")); 
    } else { 
     HANDLE console; 
     CONSOLE_FONT_INFOEX cfi; 
     cfi.cbSize = sizeof(cfi); 

     console = GetStdHandle(STD_OUTPUT_HANDLE); 
     if (!pgccf(console, 0, &cfi)) { 
      _tprintf(_T("error: failed to get console info\n")); 
     } else { 
      _tprintf(_T("font %08x tt:%d"), cfi.FontFamily, 
       (cfi.FontFamily&TMPF_TRUETYPE)); 
      wprintf(L" %s", cfi.FaceName); 
      _tprintf(_T("\n")); 
     } 
    } 
    return 0; 
} 
+5

Жаль, что я был на Windows 7, когда возникла проблема ...:/ – poke

+0

В этом случае см. Отредактированное дополнение выше для некоторого кода, чтобы опробовать. – patthoyts

+0

Хм, это выглядит интересно.Жаль, что у меня нет этой ошибки прямо сейчас (см. Мой комментарий к вопросу), но я обязательно буду помнить об этом и попробовать, если это когда-нибудь повторится :) – poke

2

Фактически речь идет об изменении шрифта в командной строке.

:]

+1

Моя консоль полностью поддерживает Unicode, хотя ... – poke

+0

Да, но вы говорите о PowerShell и Git Bash [MSYS]. То, что установщик предлагает изменить, - это шрифт командной строки (cmd.exe). –

+2

. Моя команда promt также использует шрифт Unicode. Также этот вопрос касается не диалога установщика, а ошибки при * использовании * Git внутри * любой * консоли. – poke