艺术家在字符串中缺少字符
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
每次出现名称中带有“&”符号的艺术家时,我都会在我的标签上找到 "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