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

时间:2015-09-16 15:45:53

标签: c# active-directory userprincipal

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

我已经尝试将字符串转换为Unicode,但不起作用。我使用了thisthisthis以及其他一些我无法找到的内容。

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;
    }

1 个答案:

答案 0 :(得分:0)

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

以下代码位于其中一个代码的答案之一中,即使未将其签名为正确答案,也似乎效果更好。

import java.util.ArrayList;
    public class offers
    {
      private ArrayList<PkgData> pkg;

      class PkgData
      {
        Info Info;
        offerDateRange offerDateRange;


        class Info
        {
          int Id;

        }

        class offerDateRange
        {
          String StartDate;

          String EndDate;

        }

        public int getId() {
          return Info.Id;
        }

        public String getStartDate() {
          if (offerDateRange != null && offerDateRange.StartDate != null)
            return offerDateRange.StartDate;
          return "";
        }
   }

      public ArrayList<PkgData> getpkg() {
    return pkg;
  }

}


JSON:

{  
   "offerInfo":{  
      "siteID":"1",
      "language":"en_US",
      "currency":"USD"
   },
   "offers":{  
      "pkg":[  
         {  
            "offerDateRange":{  
               "StartDate":[  
                  2015,
                  11,
                  8
               ],
               "EndDate":[  
                  2015,
                  11,
                  14
               ]
            },
            "Info":{  
               "Id":"111"
            },
            "PricingInfo":{  
               "BaseRate":1932.6
            },
            "flt_Info":{  
               "Carrier":"AA"
            }
         }
      ]
   }
}

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

尝试此方法是否适合您的字符集。