msysgit:Unicode字体警告

pok*_*oke 15 git console msysgit

最近我在使用msysgit时收到此错误,特别是当git输出生成一些非ASCII内容时:

警告:您的控制台字体可能不支持Unicode.如果您在输出中遇到奇怪的字符,请考虑切换到TrueType字体,例如Lucida Console!

有趣的是,尽管该消息告诉我我的字体不支持Unicode,但实际上它确实正确显示(正确编码并显示所有字符).

可悲的是,我找不到禁用此消息的方法.我尝试更改Git Bash中的字体(我通常使用PowerShell)但是当我在那里检查字体时,我注意到它实际上已经设置为Lucida Console,并且警告也出现在同一个控制台中.所以我有点无能为力解决这个问题,或者至少阻止msysgit一直打印这个警告.

我尝试重新安装msysgit,同时选择了应该将字体设置为Lucida Console的选项,但它没有帮助.我能做什么?

pat*_*yts 0

warn_if_raster_font该测试由中的函数完成compat/winansi.c。这使用 Win32 API GetCurrentConsoleFontEx 来查找附加到当前输出流的控制台正在使用的字体。此测试在 Windows Vista 及更高版本上应该始终正确。在 Windows XP 上,它必须在注册表中查找当前默认的控制台字体。因此,您可能使用的是 XP,并且当您为正在使用的控制台配置了快捷方式时,默认设置仍配置为使用非 unicode 字体。

如果没有,您可以尝试编译以下使用大致相同代码的代码,然后查看它打印出来的内容。如果输出包含 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 太糟糕了,当问题出现时我正在使用 Windows 7...:/ (5认同)