在下面这段代码中,字符串 "“"
的使用(即字符串中的左双引号)导致 VB.NET 编译错误:
StringVar = Replace(StringVar, "“", "“")
这里在发生什么事情?
在下面这段代码中,字符串 "“"
的使用(即字符串中的左双引号)导致 VB.NET 编译错误:
StringVar = Replace(StringVar, "“", "“")
这里在发生什么事情?
似乎您想将卷曲引号替换为它们的HTML代码等效物。
初看您的代码是绝对正确的。 问题在于VB允许在代码中使用卷曲引号代替常规引号(因为Unicode很棒,不是吗?)。也就是说,以下代码都是等效的:
Dim str = "hello"
Dim str = “hello”
Dim str = "hello“
如果你想在字符串中使用引号,VB 无法确定引号是否应该结束字符串。在 C# 中,这可以通过对引号进行转义来解决,即用 "\""
来代替 """
。在 VB 中,同样可以通过将引号 重复 使用来实现,即 """"
。
回到你的卷曲引号。根据 VB 语言规范(¶1.6.4),与直引号相同的规则也适用于卷曲引号。因此,要在代码中编写卷曲引号,请尝试以下方法:
StringVar = Replace(StringVar, "““", "“")
很不幸,我现在无法尝试这段代码,而且有可能IDE会直接用直引号替换它。如果是这种情况,可以使用Chr
或ChrW
和“左双引号”的字符代码进行替换:
StringVar = Replace(StringVar, ChrW(&H201C), "“")
或者,为了对称,用十进制表示(但我更喜欢用十六进制表示字符代码):
StringVar = Replace(StringVar, ChrW(8220), "“")
还有一点需要注意: Replace
函数可能很快被废弃,并且并不支持所有情况(例如Windows Phone 7)。而是使用 String
类的 Replace
方法:
StringVar = StringVar.Replace(, ChrW(8220), "“")
请参阅http://msdn.microsoft.com/zh-cn/library/613dxh46%28v=vs.71%29.aspx
尝试以下操作:
StringVar = Replace(StringVar, "“", ChrW(&H8220))
看起来你正在搜索 Microsoft.VisualBasic
命名空间中的 ChrW
函数,该函数用于将 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)