在下面的代码中,字符串"“"
的使用(即字符串中的左双引号)会导致VB.NET中的编译错误:
StringVar = Replace(StringVar, "“", "“")
这里发生了什么?
答案 0 :(得分:15)
好像你想用等效的HTML代码替换卷引号。
乍一看,你的代码是完全正确的。问题是VB允许用代号中的常用引号代替引号(因为Unicode很棒,对吧?)。也就是说,以下代码都是等效的:
Dim str = "hello"
Dim str = “hello”
Dim str = "hello“
现在,如果你想在字符串中使用引号,VB不知道引号是否应该结束字符串。在C#中,这可以通过转义引号来修复,即取代"""
你写的"\""
""""
。在VB中,同样是通过加倍引号来完成的,即StringVar = Replace(StringVar, "““", "“")
。
回到你的卷曲报价。与直引号相同,根据VB语言规范(¶1.6.4)。因此,要在代码中编写卷曲引号,请尝试以下操作:
Chr
不幸的是,我现在无法尝试使用此代码,而IDE完全可以通过直接引号替换它。如果是这种情况,另一种方法是使用ChrW
或StringVar = Replace(StringVar, ChrW(&H201C), "“")
使用“左双引号”的字符代码:
StringVar = Replace(StringVar, ChrW(8220), "“")
或者,对于对称性,用十进制编写(但我更喜欢十六进制用于字符代码):
Replace
其他内容:Replace
函数可能很快就会被弃用,doesn’t work everywhere(例如Windows Phone 7)。相反,请使用String
类的StringVar = StringVar.Replace(, ChrW(8220), "“")
方法:
{{1}}
答案 1 :(得分:0)
请参阅http://msdn.microsoft.com/en-us/library/613dxh46%28v=vs.71%29.aspx
试试这个:
StringVar = Replace(StringVar, "“", ChrW(&H8220))
答案 2 :(得分:0)
看起来就像您在Microsoft.VisualBasic
命名空间中搜索ChrW
function一样,该命名空间用于将Unicode字符代码转换为实际字符。 强>
如果您尝试用带引号的引号替换字符串中的直引号,请尝试以下代码:
'Declare a string that uses straight quotes
Dim origString As String = "This string uses ""quotes"" around a word."
'Create a new string by replacing the straight quotes from the original string
'with left-facing curly quotes
Dim newString As String = origString.Replace("""", ChrW(8220))
'Display the result
MessageBox.Show(newString)
或者,如果您尝试使用备用表示法替换它们来编码字符串中的左侧卷曲引号(假设您在问题中使用的那个是正确的),请尝试以下代码:
'Declare a string that uses left-facing curly quotes
Dim origString As String = "This string uses fancy " & ChrW(8220) & _
"quotes" & ChrW(8220) & " around a word."
'Create a new string by replacing the curly quotes with an arbitrary string
Dim newString As String = origString.Replace(ChrW(8220), "“")
'Display the result
MessageBox.Show(newString)