3

我有一个名为 的联系人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。

4

2 回答 2

9

您的系统中某处存在错误,其中使用所谓的 ANSI 代码页对 UTF-8 编码的字符串进行解码。此代码演示了该错误:

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 代码页。

于 2012-09-26T08:48:02.363 回答
0

您可以使用HtmlEncode为了编码您的字符

string encoded = HttpUtility.HtmlEncode("Frédéric");

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

于 2012-09-26T08:45:11.010 回答