带重音/变音符号的C#UserPrincipalName

带重音/变音符号的C#UserPrincipalName,c#,active-directory,userprincipal,C#,Active Directory,Userprincipal,在MVC应用程序的某个地方,我搜索Active Directory以获取包含该模式的用户帐户。问题是,在我的公司,一些用户在他们的用户名上有重音符号/变音符号,当我搜索时,这些用户不存在。但是如果我不使用重音符号进行搜索,应用程序就会找到这些用户 我已经尝试将字符串转换为Unicode,但没有成功。我用了、,还有一些我找不到的 public static List<string> SearchUsername(string __Pattern) { __Pat

在MVC应用程序的某个地方,我搜索Active Directory以获取包含该模式的用户帐户。问题是,在我的公司,一些用户在他们的用户名上有重音符号/变音符号,当我搜索时,这些用户不存在。但是如果我不使用重音符号进行搜索,应用程序就会找到这些用户

我已经尝试将字符串转换为Unicode,但没有成功。我用了、,还有一些我找不到的

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;
    }
公共静态列表搜索用户名(字符串模式)
{
__Pattern=\u Pattern.Normalize(NormalizationForm.FormD);
var chars=_Pattern.Where(c=>CharUnicodeInfo.GetUnicodeCategory(c)!=UnicodeCategory.nonspacemark.ToArray();
__模式=新字符串(字符).Normalize(NormalizationForm.FormC);
列表结果=新列表();
PrincipalContext Ldap=新PrincipalContext(ContextType.Domain,ConfigurationManager.AppSettings[“LdapConnection”]);
UserPrincipal用户=新的UserPrincipal(Ldap);
User.UserPrincipalName=\uu模式+“*@cebi.org.pt”;
PrincipalSearcher=新PrincipalSearcher(用户);
foreach(var userfind in Search.FindAll())
{
添加(UserFound.UserPrincipalName.ToString().Split('@').First());
}
返回结果;
}

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

下面的代码位于其中一个答案中,即使没有作为正确答案签名,但似乎效果更好

string accentedStr;
byte[] tempBytes;
tempBytes = System.Text.Encoding.GetEncoding("ISO-8859-8").GetBytes(accentedStr);
string asciiStr = System.Text.Encoding.UTF8.GetString(tempBytes);
这是通过转换缺少带重音字符的
希伯来Unicode
的文本,并将其编码回
UTF8


如果此方法适合您的字符集,请尝试。

链接中的解决方案有什么问题?字符串保持不变。您可以在编辑中发布代码吗?我已添加了代码。您正在传递的字符串方法应已包含Unicode字符,无需修改。VS中的字符串/字符有两个字节宽,带有一个私有属性,该属性指示每个字符为一个或两个字节。我将消除代码中的所有字符串转换。问题是您传递的字符串方法不正确。谢谢,我明天会尝试