【发布时间】:2019-03-29 03:28:40
【问题描述】:
我有一个带有文本字段的 MySQL 表。它包含一个超链接,并以 utf8 编码(utf8-unicode-ci collation)。我想从 VBA 以编程方式打开超链接。
文本字段可能包含诸如“őűö”之类的字符,这些字符在西欧代码页 (1252) 中不存在,但在中欧 (1250) 中可用。
我的第一次尝试是运行 pass-trough 查询,将字段值读入 VBA 字符串,然后使用 Application.Followhyperlink 打开它。当 Windows 系统区域设置(区域设置中非 unicode 兼容应用程序的默认代码页)为匈牙利语(使用代码页 1250)时,它可以工作,而当系统区域设置为德语(使用代码页 1252)时,它会失败。 VBA 字符串包含转换为系统语言环境指定的代码页的值。所以“C:\tükörtűrő”将被读作“C:\tukorturo”。
我不允许在 100 多台计算机上修复系统区域设置。那么,怎么做才对呢?
编辑:
经验教训:
* Debug.Print 不支持 unicode – 如 Erik von Asmuth 所述。调试窗口中显示的文本具有误导性。
* Application.FollowHyperlink 可以处理 unicode。
* 真正的问题是在打开链接之前进行链接健康检查,我使用了内置的 GetAttr(),这取决于系统区域设置。我已经用 GetFileAttributesW() 替换了它,现在一切似乎都正常了。一些功劳归功于 Bonnie West。 (https://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=74264&lngWId=1)
【问题讨论】: