Ms access MS Access VBA-如何从windows系统区域设置中独立读取utf8文本

Ms access MS Access VBA-如何从windows系统区域设置中独立读取utf8文本,ms-access,unicode,vba,Ms Access,Unicode,Vba,我有一个带有文本字段的MySQL表。它包含一个超链接,并以utf8(utf8 unicode ci排序规则)编码。我想从VBA以编程方式打开超链接 文本字段可能包含“őűö”等字符,这些字符在西欧代码页(1252)中不存在,但在中欧代码页(1250)中可用 我的第一次尝试是运行pass-toul查询,将字段值读入VBA字符串,然后用Application.Followhyperlink打开它。当windows系统区域设置(区域设置中不兼容unicode的应用程序的默认代码页)为匈牙利语(使用代码

我有一个带有文本字段的MySQL表。它包含一个超链接,并以utf8(utf8 unicode ci排序规则)编码。我想从VBA以编程方式打开超链接

文本字段可能包含“őűö”等字符,这些字符在西欧代码页(1252)中不存在,但在中欧代码页(1250)中可用

我的第一次尝试是运行pass-toul查询,将字段值读入VBA字符串,然后用Application.Followhyperlink打开它。当windows系统区域设置(区域设置中不兼容unicode的应用程序的默认代码页)为匈牙利语(使用代码页1250)时,它工作;当系统区域设置为德语(使用代码页1252)时,它失败。VBA字符串包含转换为系统区域设置指定的代码页的值。因此,“C:\tükörtűrő”将被解读为“C:\tukorturo”

我不允许在100多台计算机上修复系统区域设置。那么,如何做对呢


编辑:
经验教训:
*如Erik von Asmuth所述,Print不支持unicode。调试窗口中显示的文本具有误导性。
*Application.FollowHyperlink可以处理unicode。

*真正的问题是在打开链接之前进行了链接运行状况检查,我使用了内置的GetAttr(),这取决于系统区域设置。我已经用GetFileAttributesW()替换了它,现在一切似乎都正常了。邦妮·韦斯特在这里得到了一些荣誉。()

VBA和Access在内部使用UTF-16,而不是系统代码页,因此这应该不是问题。传递查询应该可以正常工作。然而:

  • 您需要使用MySQL Unicode驱动程序,而不是MySQL ANSI驱动程序

  • 并非所有VBA函数都支持unicode字符。例如
    MsgBox
    仅适用于ANSI,将向其强制转换不可用的字符 问号或最接近的等效ANSI字符

  • VBA代码本身不是unicode。你可以看到一种方法 将字符串设置为代码页中不可用的字符 由VBA使用


我正在使用unicode驱动程序。当我将查询结果读出为变量时,文本被转换。我应该将记录集字段值读入字节数组吗?如何读取
Debug.Print
不支持unicodeI。我已经测试了各种链接文本和应用程序。当系统语言环境为德语且链接不包含“őűöü”时,Followhyperlink可以工作。我的另一个方法是debug.print。尝试打印到文本框,也就是UTF-16。我不确定应用程序是否支持UTF-16。我确实有代码依赖外部方法调用来创建支持UTF-16的消息框。谢谢。我明天在办公室试试。我有一个mbox()函数,它用yes/no/cancel按钮在表单上显示文本。