最近,我在使用msysgit时遇到了这个错误,特别是当git输出生成了一些非ASCII内容时:
警告:您的控制台字体可能不支持Unicode。如果您在输出中遇到奇怪的字符,请考虑切换到TrueType字体,如Lucida!
有趣的是,尽管这条消息告诉我,我的字体不支持Unicode,但它确实支持,并且正确地显示了所讨论的文本(正确的编码&显示所有字符)。
可悲的是,我没有找到一种方法来禁用这条消息。我尝试更改Git中的字体(我通常使用PowerShell),但是当我在那里检查字体时,我注意到它实际上已经设置为Lucida控制台,并且警告也出现在同一个控制台中。所以我有点不知道该做些什么来修复这个问题,或者至少停止msysgit一直打印这个警告。
我试着重新安装msysgit,也选择了选项将字体设置为Lucida控制台,但是没有帮助。我能做什么?
发布于 2011-11-06 10:10:20
此测试由warn_if_raster_font函数在compat/winansi.c中完成。这使用Win32 API GetCurrentConsoleFontEx查找附加到当前输出流的控制台所使用的字体。在Windows和以上版本上,这个测试应该总是正确的。在Windows上,它不得不求助于在注册表中查找当前默认控制台字体。因此,您可能是在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;
}发布于 2011-11-03 07:19:06
实际上,它讨论的是更改命令提示符中的字体。
:]
https://stackoverflow.com/questions/5874175
复制相似问题