1

在 MVC 应用程序的某个点,我搜索 Active Directory 以获取包含该模式的用户帐户。问题是,在我的公司,一些用户的 UserPrincipalName 上有口音/变音符号,当我进行搜索时,这些用户不存在。但是,如果我在没有重音的情况下进行搜索,应用程序会找到这些用户。

我已经尝试将字符串转换为 Unicode,但不起作用。我用过this , this , this和其他一些我找不到的东西。

public static List<string> SearchUsername(string __Pattern)
    {
        __Pattern = __Pattern.Normalize(NormalizationForm.FormD);
        var chars = __Pattern.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark).ToArray();
        __Pattern =  new string(chars).Normalize(NormalizationForm.FormC);

        List<string> Result = new List<string>();

        PrincipalContext Ldap = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["LdapConnection"]);

        UserPrincipal User = new UserPrincipal(Ldap);
        User.UserPrincipalName = __Pattern + "*@cebi.org.pt";

        PrincipalSearcher Search = new PrincipalSearcher(User);

        foreach (var UserFound in Search.FindAll())
        {
            Result.Add(UserFound.UserPrincipalName.ToString().Split('@').First());
        }

        return Result;
    }
4

1 回答 1

1

该链接包含很少的解决方案,其中一些忽略了不同语言中使用的几个字符。

以下代码位于其中之一的答案中,即使未将其签名为正确答案,它似乎也能更好地工作。

string accentedStr;
byte[] tempBytes;
tempBytes = System.Text.Encoding.GetEncoding("ISO-8859-8").GetBytes(accentedStr);
string asciiStr = System.Text.Encoding.UTF8.GetString(tempBytes);

这是通过将Hebrew Unicode缺少重音字符的文本转换为UTF8.

试试这个方法是否适合你的字符集。

于 2015-09-16T18:00:10.363 回答