You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让Visual Basic区分标准双引号与弯引号的差异?

解决VBScript无法区分直引号与弯引号的问题

这个问题的核心在于VBScript默认的字符串比较逻辑——它是**区域感知(locale-aware)**的,会把一些视觉相似但Unicode编码不同的字符(比如直双引号" U+0022和右弯双引号 U+201D)视为等价,所以才会出现你测试的那种相等判断结果。

要让VBScript严格区分这两种引号,你可以用以下两种方法:

1. 使用二进制比较替代默认文本比较

VBScript提供了StrComp函数,通过指定第三个参数为vbBinaryCompare(数值为0),可以强制按字符的Unicode编码值做逐字节的严格比较,这样就能区分直引号和弯引号了。

示例代码:

' 默认比较(返回True,因为locale视为等价)
MessageBox.Show("""1""" = "””1””")

' 二进制比较(返回False,因为编码不同)
MessageBox.Show(StrComp("""1""", "””1””", vbBinaryCompare) = 0)

StrComp返回0表示两个字符串相等,返回1或-1表示不等,用这个逻辑来判断就能得到准确的区分结果。

2. 对字符串操作函数指定二进制模式

如果你需要做查找、替换这类字符串操作,也要给对应的函数加上vbBinaryCompare参数,确保操作是基于严格编码的:

' 查找字符串中的直引号位置(二进制模式)
dim straightQuotePos
straightQuotePos = InStr(1, yourString, """", vbBinaryCompare)

' 查找字符串中的弯引号位置
dim curlyQuotePos
curlyQuotePos = InStr(1, yourString, "”", vbBinaryCompare)

额外注意事项

因为你是用Python生成VBScript代码直接运行,只要Python生成的字符串正确包含弯引号的Unicode字符(而不是被转义或错误转换),VBScript就能正确接收这些字符——VBScript本身是支持Unicode的,不需要额外处理编码,重点就在比较/操作时的模式选择。

内容的提问来源于stack exchange,提问作者Zen Skunkworx

火山引擎 最新活动