在C#中,String .Replace不会取代丹麦字符

时间:2016-11-11 10:16:51

标签: c# .net string str-replace

所以我有一个包含丹麦字符(æ)的字符串,说:

string textString = "tæst"; string newString = "";

出于某种原因这个

newString = textString .Replace("æ", "e");

如果没有正确替换,那么当它应该是newString = "tæst"时会产生newString = "test"

然而,并不总是

我已经在多台服务器上进行了测试,其中一些服务器在"test"上正确返回,其他服务器为"tæst"

我在思考,也许字符串不被识别为utf8字符串,并且应该被强制识别为utf8。只是一个猜测,你有想法/猜测吗?

由于

2 个答案:

答案 0 :(得分:4)

大多数Unicode字符都有多个版本,看起来非常相似。例如:11①⑴

var s = "æӕ".Replace("æ", "ae"); // s = "aeæ"
var v = "æӕ".Select(c => (int)c).ToArray(); // { 230, 1237 }

我认为期待意外(特别是用户输入时)是一种好习惯

var s = "æӕ";
var a = s.ToCharArray(); // or use StringBuilder for non 1 to 1 character replacements

for (int i = 0; i < s.Length; i++)
    if (a[i] > 127)
        switch (a[i]) {
            case 'æ': case 'ӕ': 
                a[i] = 'e'; break;
            default: 
                Debug.Print("Unexpected character " + a[i]);
        }

s = new string(a);

以下是一些不相关的Falsehoods Programmers Believe

答案 1 :(得分:-1)

<强> 修改的即可。是的,没有正确地阅读这个问题。 :(

Rbm在上面是正确的。 new不是有效名称。这段代码有效。

 static void Main(string[] args)
    {
        string text = "tæst";
        string s = string.Empty;

        s = text.Replace("æ", "e");
        Console.WriteLine(s);
        Console.ReadKey();
    }