首页 > 解决方案 > Linux环境中空格前的Unicode排序号

问题描述

在我的 Linux 环境中,我使用u8_casecoll对字符串进行排序。将本地设置为“en_US.UTF-8”,以下是排序顺序。

  1. “成员 1_LN”
  2. “会员群”

但是在windows环境下,我是用CompareStringW排序的,下面是排序顺序。

  1. “会员群”
  2. “成员 1_LN”

我需要使 Linux 环境表现出与 Windows 相同的行为。有人可以帮助调整 Linux 代码以获得预期的排序顺序吗?提前致谢。

下面是 Linux 环境的 C 代码。

#include <errno.h>
#include <locale.h>
#include <unitypes.h>
int main()
{
    setlocale(LC_ALL, "en_US.UTF-8");
    uint8_t text1[] = "Member1_LN";
    uint8_t text2[] = "Member Group";
    int ret_val = 0;
    int resultp = 0;
    ret_val = u8_casecoll(text1,u8_strlen(text1),text2,u8_strlen(text2), NULL, NULL, &resultp);
    if(0 == ret_val)
    {
        printf("resultp = %d\n", resultp);
        printf("expected = 1\n");
    }
    else
    {
        int err = errno;
        printf("u8_casecoll ret = %d errno = %d\n", ret_val, err);
    }
    return 0;
}

输出:

resultp = -1
expected = 1

标签: c++cunicodecollate

解决方案


推荐阅读