如何解决如何在 VB6 应用程序中处理 DLL 错误消息的编码/本地化?
(更新:这个问题在更好地理解发生了什么之后得到更新,我删除了嘈杂的错误部分。)
这段代码属于 COM DLL。对于上下文,它包含一个在经典 ASP 页面中创建和处理的 ActiveX 对象。
Public Function getHttpResponse(url As String)
Dim request As New WinHttpRequest
On Error GoTo errGetHttpResponse
request.Open "HEAD",url
request.Send
getHttpResponse = request.Status
Exit Function
errGetHttpResponse:
getHttpResponse = Err.Description
End Function
Err.Description
字符串本地化和编码似乎依赖于运行环境。对于错误 80072EE5
,我得到 Err.Description
(从加载 DLL 的可执行文件的 GUI 中检索):
- 机器 1,Windows 2008 SP2 32 位,法语:
L'URL n'est pas valide
- 机器 2,Windows 2012 R2 标准 64 位,法语:
L’URL n’est pas valide
,hexdump 给出:
值得注意的是,撇号不一样。
调用和显示 ActiveX 输出的 ASP 页面可以这样简化:
Session.LCID=1036 ' french identifier (global.asa file)
Dim o : Set o = CreateObject("TheDLL.TheObject")
Response.Write o.getHttpResponse(anInvalidUrl)
虽然从机器 1 运行它可以正确呈现,但从机器 2 开始,撇号被隐藏(在 Firefox 上查看源代码显示一个 00 92
方形字符)。机器 2 生成的 HTML 复制如下:
00000000 4c 92 55 52 4c 20 6e 92 65 73 74 20 70 61 73 20 |L.URL n.est pas |
00000010 76 61 6c 69 64 65 |valide
撇号被编码为 0x92
,这是在 ISO-8859-1 中编码的 RIGHT SINGLE QUOTATION MARK。
差异如何解释?是否有办法设置与平台无关的输出?
解决方法
在评论部分与 Remy Lebeau 和 GSerg 进行了深入讨论后,以下是理解差异的关键:
- 字符串由 VB6 以 UTF-16 处理,但它们的输出方式取决于上下文
- 本地化
-
Response.Charset
和Session.Codepage
用于 ASP 页面,如果未指定,则为 default values - (各种 IO/GUI 机制)
- 错误消息可能因实现而异(这可以解释为什么撇号从
L'URL
更改为L’URL
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。