艺术家在字符串中缺少字符

Artists missing characters in string

每次出现名称中带有“&”符号的艺术家时,我都会在我的标签上找到 "R3HAB VINAI" 而不是 "R3HAB & VINAI" 我想得到整个字符串,因为它更有用给最终用户。奇怪的是曲目名称中出现了“&”符号。也许有人可以告诉我我做错了什么。

last.fm JSON API 数据来自 user.getRecentTracks

{  
recenttracks:{  
    track:[  
        {  
            artist:{  
                #text:"R3HAB & VINAI",
                mbid:"eb0fbe2c-6eb7-40bc-900b-3e056c158125"
            },
            name:"HOW WE PARTY",
            streamable:"0",
            mbid:"b410da12-f308-4e2f-af88-19c69312e450",
            album:{  
                #text:"",
                mbid:""
            },
            url:"https://www.last.fm/music/R3HAB+&+VINAI/_/HOW+WE+PARTY",
            image:[  
                {  
                    #text:"",
                    size:"small"
                },
                {  
                    #text:"",
                    size:"medium"
                },
                {  
                    #text:"",
                    size:"large"
                },
                {  
                    #text:"",
                    size:"extralarge"
                }
            ],
            @attr:{  
                nowplaying:"true"
            }
        },
        {  
            artist:{  
                #text:"Alan Walker",
                mbid:""
            },
            name:"Sing me to Sleep",
            streamable:"0",
            mbid:"",
            album:{  
                #text:"",
                mbid:""
            },
            url:"https://www.last.fm/music/Alan+Walker/_/Sing+me+to+Sleep",
            image:[  
                {  
                    #text:"",
                    size:"small"
                },
                {  
                    #text:"",
                    size:"medium"
                },
                {  
                    #text:"",
                    size:"large"
                },
                {  
                    #text:"",
                    size:"extralarge"
                }
            ],
            date:{  
                uts:"1501613749",
                #text:"01 Aug 2017, 18:55"
            }
        }
    ],
    @attr:{  
        user:"SomeName",
        page:"1",
        perPage:"1",
        totalPages:"8676",
        total:"8676"
    }
}
}

C# class 列表

    public class Rootobject
    {
        public Recenttracks recenttracks { get; set; }
    }

    public class Recenttracks
    {
        public Track[] track { get; set; }
        public Attr attr { get; set; }
    }

    public class Attr
    {
        public string user { get; set; }
        public string page { get; set; }
        public string perPage { get; set; }
        public string totalPages { get; set; }
        public string total { get; set; }
    }

    public class Track
    {
        public Artist artist { get; set; }
        public string name { get; set; }
        public string streamable { get; set; }
        public string mbid { get; set; }
        public Album album { get; set; }
        public string url { get; set; }
        public Image[] image { get; set; }
        public Attr1 attr { get; set; }
        public Date date { get; set; }
    }

    public class Artist
    {
        [JsonProperty("#text")]
        public string text { get; set; }
        public string mbid { get; set; }
    }

    public class Album
    {
        public string text { get; set; }
        public string mbid { get; set; }
    }

    public class Attr1
    {
        public string nowplaying { get; set; }
    }

    public class Date
    {
        public string uts { get; set; }
        public string text { get; set; }
    }

    public class Image
    {
        public string text { get; set; }
        public string size { get; set; }
    }

当显示到 WinForm 时,您需要转义 & 符号才能显示它。您可以通过将所有出现的地方替换为 && 来做到这一点。

在设置您的艺术家之前,对包含它的字符串执行此操作:

artist = artist.Replace("&", "&&");

默认情况下,与号 (&) 被解释为 "underline the following character and make it a keyboard shortcut."(当然 不会 显示与号。)因此,您有两个选择:要么

  • 将标签的 UseMnemonic 属性 设置为 false,告诉它不要尝试解释任何符号,或

  • 用两个&符号替换每个&符号,这是一个特殊的序列,意思是"leave this ampersand alone"。 (当然只显示一个符号。)

您很可能需要转义与号。

  • 如果您使用 windows 表单并将其显示在标签中,从技术上讲,您可以通过将 UseMnemonic 属性 切换为 false 在标签上。
  • 如果您使用的不是标签,可以使用 TextFormatFlag 如果您不想转义它
  • 您可以使用 &&
  • 转义该字符
  • 如果您要在网络上显示它,您需要使用 HttpUtility.HtmlEncode() 或将所有 & 切换为 &
  • 来转义它
  • 如果您更喜欢另一种编码方式,您可以使用 WebUtility.HtmlEncode(),它不依赖于 System.Web