通过忽略编码进行字符串比较

时间:2014-05-09 14:50:01

标签: c# string character-encoding

我有两个字符串。

string one = "Montr�al";
string two = "Montréal";

什么是所需的字符串比较,或者甚至可以在这两个字符串之间进行字符串比较以使它们彼此相等。我累了

if(one.equals(two)){
 //true
}

也累了

if(String.equals(one,two, StringComparison.InvariantCultureIgnoreCase)){
//true
}

甚至厌倦了他们似乎都失败的String.Compare方法。我如何让这两个字符串彼此相等。

2 个答案:

答案 0 :(得分:0)

首先将它们转换为相同的编码。如果string two为utf,请尝试

string one = Encoding.UTF8.GetString(Encoding.ASCII.GetBytes("Montr�al"));

但是,"Montr�al"必须直接从源代码中读取,而不是在代码编辑器中编写。

答案 1 :(得分:0)

class Program
{
    static void Main(string[] args)
    {
        string one = "Montr�al";
        string two = "Montréal";

        one = Translate(one);
        two = Translate(two);

        if (string.Equals(one, two, StringComparison.InvariantCultureIgnoreCase))
        {
            Console.WriteLine("Equal");
        }
        Console.ReadLine();
    }


    static string Translate(string input)
    {
        var output = new char[input.Length];
        for (int i = 0; i < input.Length; i++)
        {
            var charCode = (int) input[i];
            if (charCode == 65533) // char �
                output[i] = (char)233; // é
            else
                output[i] = input[i];
        }
        return new string(output);
    }
}