在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;
}
答案 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
。
尝试此方法是否适合您的字符集。