如何删除像Frédéric这样的名字中的特殊字符?

时间:2012-09-26 08:43:31

标签: c# .net asciiencoding

我有一个名为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。

2 个答案:

答案 0 :(得分:9)

您的系统中有一个错误,其中UTF-8编码的字符串使用所谓的ANSI代码页进行解码。此代码演示了错误:

var name = "Frédéric";
var bytes = Encoding.UTF8.GetBytes(name);
var wrongName = Encoding.Default.GetString(bytes);

现在wrongNameFré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");

链接(特殊角色):http://www.utexas.edu/learn/html/spchar.html