我有一个名为Frédéric
的联系人。
当我在网站的联系人列表中搜索它时,名称会更改为"Frédéric"
,因为它在数据库中搜索此名称(Frédéric
),我的名称为Frédéric
在它。
因此,数据库中没有这样的名称,表示没有找到任何联系人。
如何获取此名称Frédéric
以外的真实姓名。?
我的解码方法是
public static string Decode(string text)
{
if (text == null)
{
return "";
}
string result = "";
string[] values = text.Split('@');
bool escaped = false;
try
{
for (int i = 0; i < values.Length; i++)
{
if (!escaped)
{
result += values[i].Replace("_"," ");
}
else
{
//result += System.Text.ASCIIEncoding.ASCII.GetChars(new byte[] { byte.Parse(values[i]) })[0];
}
escaped = !escaped;
}
}
catch { }
return result;
}
这里方法的论点是Frédéric,但它实际上必须是Frédéric。
答案 0 :(得分:9)
您的系统中有一个错误,其中UTF-8编码的字符串使用所谓的ANSI代码页进行解码。此代码演示了错误:
var name = "Frédéric";
var bytes = Encoding.UTF8.GetBytes(name);
var wrongName = Encoding.Default.GetString(bytes);
现在wrongName
是Frédéric
。
您需要做的是:
var name = "Frédéric";
var bytes = Encoding.UTF8.GetBytes(name);
var correctName = Encoding.UTF8.GetString(bytes);
Encoding.Default
因Windows区域设置而异。在我的计算机上,代码页是Windows 1252,也称为ISO 8859:1,但在世界其他地方,它可能是另一个代码页。我相信日语ANSI代码页是932,在这种情况下,错误的名称将显示为Frテゥdテゥric
。
无论如何,要使用的正确编码是UTF-8,因为您的字符串是使用该编码进行编码的。试图“修复”受损的字符串并不是一条富有成效的路径,因为它依赖于代码执行的系统的ANSI代码页。
答案 1 :(得分:0)
您可以使用HtmlEncode
对您的角色进行编码
string encoded = HttpUtility.HtmlEncode("Frédéric");