带有重音/变音符的c# UserPrincipalName
本文关键字:音符 UserPrincipalName | 更新日期: 2023-09-27 18:13:12
在MVC应用程序的某些地方,我对Active Directory进行搜索以获得包含该模式的用户帐户。问题是,在我的公司,一些用户在他们的UserPrincipalName上有口音/变音符号,当我使用口音进行搜索时,这些用户不存在。但是如果我不带重音进行搜索,应用程序就会找到这些用户。
我已经尝试将字符串转换为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;
}
该链接包含的解决方案很少,有些忽略了不同语言中使用的几个字符。
下面的代码是其中一个答案中的一个,即使它没有被签名为正确答案,似乎也能更好地工作。
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
来完成的。
试试这个方法是否适合你的字符集。