首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >msysgit: Unicode字体警告

msysgit: Unicode字体警告
EN

Stack Overflow用户
提问于 2011-05-03 18:47:32
回答 2查看 9.2K关注 0票数 16

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

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

有趣的是,尽管这条消息告诉我,我的字体不支持Unicode,但它确实支持,并且正确地显示了所讨论的文本(正确的编码&显示所有字符)。

可悲的是,我没有找到一种方法来禁用这条消息。我尝试更改Git中的字体(我通常使用PowerShell),但是当我在那里检查字体时,我注意到它实际上已经设置为Lucida控制台,并且警告也出现在同一个控制台中。所以我有点不知道该做些什么来修复这个问题,或者至少停止msysgit一直打印这个警告。

我试着重新安装msysgit,也选择了选项将字体设置为Lucida控制台,但是没有帮助。我能做什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-06 10:10:20

此测试由warn_if_raster_font函数在compat/winansi.c中完成。这使用Win32 API GetCurrentConsoleFontEx查找附加到当前输出流的控制台所使用的字体。在Windows和以上版本上,这个测试应该总是正确的。在Windows上,它不得不求助于在注册表中查找当前默认控制台字体。因此,您可能是在XP上,虽然您已经为正在使用的控制台配置了快捷方式,但默认设置仍然配置为使用非unicode字体。

如果没有,您可以尝试编译使用大致相同代码的以下代码,并查看它输出的内容。如果输出包含tt: 4,我们将期望相应的git代码正确地检测控制台字体为truetype。

代码语言:javascript
复制
#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;
}
票数 0
EN

Stack Overflow用户

发布于 2011-11-03 07:19:06

实际上,它讨论的是更改命令提示符中的字体。

:]

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5874175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档