wcscoll返回的结果与预期不同

时间:2015-05-30 17:11:06

标签: c widechar

考虑以下代码:

#include <wchar.h>
#include <locale.h>
#include <stdio.h>

int main(void) {
    setlocale(LC_ALL, "pl_PL.UTF-8");
    printf("%d\n", wcscoll(L"ą", L"b"));
    return 0;
}

输出

158

但是我希望它是-1,因为 - 就在波兰字母表中的b之前。它为什么返回158?如果不是这样,怎么能按字母顺序比较单词?

2 个答案:

答案 0 :(得分:2)

我在我的Linux机器上尝试过,我得到Lion 5 meat 作为输出,正如你的那样正面。

然后我在1编辑了支持的区域设置,取消注释/etc/locale.gen(默认情况下未启用),运行pl_PL.UTF-8,现在它提供sudo locale-gen,这是否定的,预期

结论是您的系统配置不支持所选的区域设置。

答案 1 :(得分:1)

检查-4的返回值;它可能无法识别您的国家/代码页字符串。

MS locale names use dashes, not underscores。如果您使用的是Windows,请尝试传递setlocale而不是pl-PL