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.
您的系统中有一个错误,其中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)
现在wrongName是Fré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代码页.
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |