zan*_*tet 16 vb.net string escaping character-encoding quotation-marks
在下面的代码中,字符串的使用"“"(即字符串中的左双引号)导致VB.NET中的编译错误:
StringVar = Replace(StringVar, "“", "“")
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
Kon*_*lph 15
看起来好像要用等效的HTML代码替换卷曲引号.
乍一看,您的代码绝对正确.问题是VB在代码中允许用引号代替常规引号(因为Unicode很棒,对吧?).也就是说,以下代码都是等效的:
Dim str = "hello"
Dim str = “hello”
Dim str = "hello“
Run Code Online (Sandbox Code Playgroud)
现在,如果你想在字符串中使用引号,VB不知道引号是否应该结束字符串.在C#中,这可以通过转义引号来修复,即代替"""你写的"\"".在VB中,通过加倍引号来完成相同的操作,即"""".
回到你的卷曲报价.与直引号相同,根据VB语言规范(1.6.4).因此,要在代码中编写一个引号,请尝试以下操作:
StringVar = Replace(StringVar, "““", "“")
Run Code Online (Sandbox Code Playgroud)
不幸的是,我现在无法尝试这个代码,IDE完全可以用直接引号替换它.如果是这种情况,另一种方法是使用Chr或ChrW使用"左双引号"的字符代码:
StringVar = Replace(StringVar, ChrW(&H201C), "“")
Run Code Online (Sandbox Code Playgroud)
或者,对于对称性,用十进制编写(但我更喜欢十六进制用于字符代码):
StringVar = Replace(StringVar, ChrW(8220), "“")
Run Code Online (Sandbox Code Playgroud)
其他东西:该Replace功能可能很快就会被弃用,并且无法在任何地方使用(例如Windows Phone 7).相反,使用类的Replace方法String:
StringVar = StringVar.Replace(, ChrW(8220), "“")
Run Code Online (Sandbox Code Playgroud)