【问题标题】:Artists missing characters in string [duplicate]艺术家在字符串中缺少字符[重复]
【发布时间】:2018-01-08 19:11:42
【问题描述】:

每次出现名称中带有“&”符号的艺术家时,我都会在我的标签上显示“R3HAB VINAI”而不是“R3HAB & VINAI”,我想获取整个字符串,因为它对结尾更有用用户。奇怪的是“&”符号出现在曲目名称中就好了。也许有人可以告诉我我做错了什么。

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

{  
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# 类列表

    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 标签?我相信你需要加倍&。所以用&& 替换&stackoverflow.com/questions/4325094/…
  • 取决于您如何显示字符串。我们需要知道它是否是 winform、xml、html 等。& 的解释根据您的情况而有所不同。
  • 在winforms程序中也会被保存到文本文件中

标签: c# json.net last.fm


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    默认情况下,与号 (&) 被解释为“在后面的字符下划线并使其成为键盘快捷键”。 (当然显示&符号。)所以,你有两个选择:要么

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

    • 将每个 & 号替换为两个 & 号,这是一个特殊的序列,意思是“不要管这个 & 号”。 (当然只显示一个&符号。)

    【讨论】:

      【解决方案3】:

      您很可能需要转义 & 符号。

      • 如果您使用的是 Windows 窗体并将其显示在标签中,从技术上讲,您可以通过将标签上的 UseMnemonic 属性切换为 false 来实现,而无需转义 & 符号。
      • 如果您使用的不是标签,如果您不想转义,可以使用 TextFormatFlag 来完成
      • 您可以使用 && 转义该字符
      • 如果您在网络上显示它,您需要使用HttpUtility.HtmlEncode() 或将所有& 切换为& 来转义它
      • 如果您喜欢其他编码方式,您可以使用不依赖于System.WebWebUtility.HtmlEncode()

      【讨论】:

      • 你的意思是& ;)
      • 我做到了,谢谢大声笑
      猜你喜欢
      • 2012-02-15
      • 2018-12-16
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 2013-03-13
      相关资源
      最近更新 更多