在VB中使用字符串中的左双引号

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完全可以用直接引号替换它.如果是这种情况,另一种方法是使用ChrChrW使用"左双引号"的字符代码:

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)

  • 我的天啊!拧你,Visual Basic! (4认同)
  • @Kevin很好的推测,但可能是错误的:VB只开始接受.NET中的卷曲引号(VB7).此时.VBA已经存在,但多年来一直使用该语言的VB6方言**不支持卷曲引号.因此,该功能被引入到一种语言中,该语言不用于Word中的宏. (2认同)