string.Replace不能处理Unicode字符“â〜...”

时间:2015-02-05 18:56:33

标签: c# string

我正在尝试转换以下字符串:

★ Bayonet | Slaughter (Minimal Wear)

简单地说:

Bayonet | Slaughter (Minimal Wear)

为此,我尝试使用以下内容:(名称是包含上述内容的字符串)

name = name.Replace("★ ", "");

但是,字符串保持不变。我正在使用JSON响应检索字符串,该响应似乎表明使用以下序列创建了奇怪的文本(星号):

\u2605 

但是,字符串似乎会自动转换为帖子顶部的那个奇怪的字符串。那么为什么name.replace函数无法替换这些字符?

4 个答案:

答案 0 :(得分:5)

这可能是编码问题。 在C#部分,我建议你试着写一下:

name = name.Replace("\u2605", string.Empty);

而不是硬编码对应的字符。 .Net将为您处理\ u2605。

答案 1 :(得分:0)

我不清楚...是否只是普通文本,我会认为是。将正则表达式替换为集合[â˜]中不需要的所有字符:

 Regex.Replace("★ Bayonet | Slaughter (Minimal Wear)", @"[â˜]", string.Empty);

结果如下:

  

...刺刀|屠杀(略有磨损)

注意实际的完整字符串,我可以写一个更好的模式匹配,以更外科的方式替换。

更新

由于这些字符仅在开头,这使我们的任务更容易,并且不利于遍历整个结果;加快这个过程!

这是与正则表达式替换一起使用的模式^[^\{]

它表示匹配字符串^开头的任何内容与我们的否定集[^ ],它将搜索除了之外的任何内容{这是一个开头JSON用于一个或多个项目+。一个或多个意味着如果没有匹配,则不会有替换;只会提取开头的匹配项。

string data = "â˜{\"success\":true,\"rgInventory\":{\"1509597855\":";

Console.WriteLine (data); // â˜{"success":true,"rgInventory":{"1509597855":

string pattern =  @"^[^{]+";

Console.WriteLine (Regex.Replace(data, pattern, string.Empty));
// {"success":true,"rgInventory":{"1509597855":

答案 2 :(得分:0)

由于上述解决方案都不适用于您,因此只需切断奇怪的字符串而不是试图猜测正确的形状,可能会更简单。

以下方式,如果字符串以某种方式改变,你将避免再次做这件事的头痛:

因为我们知道奇怪的事件总是在字符串的开头,所以我们只是检查它是不是0-9 az或AZ而不是猜测它是什么字符... < / strong>

class Program
{
    static void Main(string[] args)
    {
        string name = "★ Bayonet | Slaughter (Minimal Wear)";
        name = fix_string(name);
        Console.WriteLine(name);
    }
    static string fix_string(string str)
    {
        int fix=0;
        while (fix<str.Length && (!(str[fix] > (char)48 && str[fix] < (char)57) && !(str[fix] > (char)65 && str[fix] < (char)90) && !(str[fix] > (char)97 && str[fix] < (char)122)))
        {
            fix++;
        }
        return str.Substring(fix,str.Length-fix);
    }
}

PS:这是ascii表,因此您可以调整要从字符串开头修剪的字符,并调整函数以测试整个字符串,如果您希望以后

  • 从你的字符串判断,我认为你不需要超过ascii字符

enter image description here

答案 3 :(得分:-2)

这段代码对我有用,也许你可以通过复制粘贴将它解释为你的代码?看看是否有效!完全不确定它是否是你想要的,但是。

        String str = "★ Bayonet | Slaughter (Minimal Wear)";
        str = str.Replace("★","");
        Console.WriteLine(str);
        Console.ReadLine();