VB6文本搜索异常匹配特殊/HTML/外文字符问题求助
兄弟,我之前维护VB6老项目时也碰到过类似的诡异字符匹配问题,结合你的描述,给你几个排查和解决的方向:
优先排查系统区域语言的排序规则
虽然你说环境没新增/删除东西,但系统自动更新或者不小心误改区域设置都可能触发这个问题。VB6的vbTextCompare和IDE的文本搜索都是依赖系统区域的排序规则的——比如德语区域默认会把ß视为ss的等价字符,部分欧洲区域会把þ和th做等价映射,刚好和你的症状完全对应。
你可以打开控制面板的「区域设置」,找到「语言」->「高级设置」->「更改排序规则」,看看是不是选了这类会做字符等价匹配的规则,改成「英语(美国)」或者勾选「区分变音符号」选项后,重启VB6 IDE再测试。在代码里用
vbBinaryCompare替代vbTextCompare验证
你可以先把代码里的Replace函数的比较参数改成vbBinaryCompare试试,比如:Replace(sourceStr, "ss", "ß", , , vbBinaryCompare)二进制比较是严格按字符的ASCII/Unicode编码值匹配的,不会做等价映射。如果改成这个后就不会出现把
Process变成Proceß的问题,那就实锤是文本比较规则的锅了。如果需要不区分大小写的精确匹配,可以先把字符串统一转成大写/小写后再用二进制比较。检查VB6项目的代码页设置
打开VB6项目的属性窗口,看看「代码页」是不是被改成了非默认的值(比如德语、冰岛语这类和特殊字符相关的代码页)。代码页会影响项目里字符的存储和处理逻辑,改成和系统默认一致的代码页(比如1252)可能解决问题。IDE搜索问题的解决
VB6 IDE的搜索逻辑和代码里的文本比较是共用系统规则的,所以只要把系统区域排序规则改回正常的,IDE的搜索就会恢复精确匹配。如果改了设置还是不行,可以试试重启IDE,甚至重装VB6的SP6补丁,有时候老IDE的缓存文件出问题也会有奇怪的行为。
备注:内容来源于stack exchange,提问作者BlueGI

