考虑以下代码:
#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?如果不是这样,怎么能按字母顺序比较单词?
答案 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
。