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

saa*_*thy 3 .net c# 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;
        }
Run Code Online (Sandbox Code Playgroud)

这里方法的论点是Frédéric,但它实际上必须是Frédéric.

Mar*_*age 9

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

var name = "Frédéric";
var bytes = Encoding.UTF8.GetBytes(name);
var wrongName = Encoding.Default.GetString(bytes);
Run Code Online (Sandbox Code Playgroud)

现在wrongNameFrédéric.

你需要做的是:

var name = "Frédéric";
var bytes = Encoding.UTF8.GetBytes(name);
var correctName = Encoding.UTF8.GetString(bytes);
Run Code Online (Sandbox Code Playgroud)

Encoding.Default根据您的Windows区域设置而异.在我的计算机上,代码页是Windows 1252,也称为ISO 8859:1,但在世界其他地方,它可能是另一个代码页.我相信日本ANSI代码页是932,在这种情况下,错误的名称将出现Fr??d??ric.

无论如何,要使用的正确编码是UTF-8,因为您的字符串是使用该编码进行编码的.尝试"修复"受损的字符串并不是一条富有成效的路径,因为它依赖于代码执行的系统的ANSI代码页.