2015-09-16 5 views
1

В некоторой точке приложения MVC я выполняю поиск в Active Directory, чтобы получить учетную запись пользователя, содержащую этот шаблон. Проблема в том, что у моей компании некоторые пользователи имеют акценты/диакритические знаки в своем UserPrincipalName, и когда я выполняю поиск, с акцентами эти пользователи не существуют. Но если я выполняю поиск без акцентов, приложение найдет этих пользователей.C# 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; 
    } 
+0

В чем проблема с решениями в ссылках, с которыми вы связались? –

+0

Строка осталась прежней. –

+0

Можете ли вы опубликовать свой код в редактировании? –

ответ

0

Ссылка содержит несколько решений, некоторые из которых игнорируют несколько символов, используемых на разных языках.

Следующий код находится в одном из ответов одного из них и, кажется, работает лучше, хотя он не подписан как правильный ответ.

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.

Попробуйте, если этот метод подходит для вашего набора символов.

+0

Спасибо, я постараюсь завтра –

Смежные вопросы