当.pc文件里有中文路径,用pkg-config解析出来会有乱码。
1.下载pkg-config源码https://pkg-config.freedesktop.org/releases/,我下载的是最新的0.29.2版本
2.修改parse.c的strdup_escape_shell()函数
static char *strdup_escape_shell(const char *s)
{
size_t r_s = strlen(s)+10, c = 0;
char *r = g_malloc(r_s);
while (s[0]) {
if (((s[0] < '$') ||
(s[0] > '$' && s[0] < '(') ||
(s[0] > ')' && s[0] < '+') ||
(s[0] > ':' && s[0] < '=') ||
(s[0] > '=' && s[0] < '@') ||
(s[0] > 'Z' && s[0] < '^') ||
(s[0] == '`') ||
(s[0] > 'z' && s[0] < '~') ||
(s[0] > '~')) && (s[0] & 0x80) == 0x00) { //这里增加一个判断字符最高位是否为1的条件
r[c] = '\\';
c++;
}
r[c] = *s;
c++;
if (c+2 >= r_s) {
r_s *= 2;
r = g_realloc(r, r_s);
}
s++;
}
r[c] = 0;
return r;
}
3.重新编译安装后可显示中文。
原因是strdup_escape_shell()函数会将某些特殊字符前面加上'\'进行转义。utf-8编码下的一个中文字符会用多个字节表示,每个字节的最高位都为1,所以通过s[0]>'~'的条件在前面加上了转义字符,照成中文输出乱码。