【问题标题】:Incorrect Encoding Between Classic ASP and Access经典 ASP 和 Access 之间的编码不正确
【发布时间】:2012-09-26 15:57:33
【问题描述】:

我有一个用 classic-asp 编写并连接到 Access 数据库的用户搜索。客户希望它不区分重音,因此搜索 LeLievre 之类的名称将返回条目 LeLièvre。

由于无法在访问中执行此操作,因此我编写了一个快速函数,可修改搜索查询以包含重音的所有选项,如下所示:

    strOutput = ""
    For i = 1 to Len(input)
        curLetter = Mid(input, i, 1)
        Select Case curLetter
            case "e", "é", "è", "ê", "ë", "E", "É", "È", "Ê", "Ë"
                strOutput = strOutput & "[eéèêëEÉÈÊË]"
            case "a", "à", "â", "ä", "A", "À", "Â", "Ä"
                strOutput = strOutput & "[aàâäAÀÂÄ]"
            Case "i", "ì", "ï", "î", "I", "Ì", "Ï", "Î"
                strOutput = strOutput & "[iïîìIÏÎÌ]"
            Case "o", "ô", "ö", "ò", "O", "Ô", "Ö", "Ò"
                strOutput = strOutput & "[oôöòOÔÖÒ]"
            Case "u", "ù", "û", "ü", "U", "Ù", "Û", "Ü"
                strOutput = strOutput & "[uûüùUÛÜÙ]"
            Case "c", "ç", "C", "Ç"
                strOutput = strOutput & "[cçCÇ]"
            Case Else           
                strOutput = strOutput & curLetter
        End Select
    Next

现在,我的问题。我将页面设置为使用“ISO-8859-1”以及 asp CodePage/CharSet 集(我也尝试过 UTF-8),但看起来我的页面使用了两种不同的编码。

我的意思是如果我搜索“LeLièvre”然后打印出生成的查询,它不会找到“è”并将其替换为“[eéèêëEÉÈÊË]”。此外,如果我将查询打印到页面上,一切都是一团糟,并且编码错误,除了找不到和替换的“è”。这是查询的一部分,
AND LastName LIKE '%L[eéèêëEÉÈÊË]L[iïîìIÃÃŽÃŒ]èvr[eéèêëEÉÈÊË]%'

生成的这个错误编码的查询会导致在数据库中找不到任何内容。

不幸的是,我在处理编码方面没有太多经验,在最后一次摆弄这个之后,我完全被难住了,我不得不来这里寻求帮助。

任何建议将不胜感激。

【问题讨论】:

  • 您的输入来自哪里?我的猜测是,当您(i)将 Response.CodePage 设置为 65001 并且(ii)将 Response.CharSet 设置为“UTF-8”和(iii)使用硬编码输入 =“LeLièvre”进行第一次测试时,一切正常,对吗?
  • 检查此 SO 链接:stackoverflow.com/questions/5681078/… 似乎 MS-Access 是 UTF-16 而不是 UTF-8,您可以使用 StrConv 函数(指定 vbUnicode 或 vbFromUnicode)
  • StrConv 可能很有用,但它在 VBS 中不存在,所以我不能使用它。如果我对“LeLièvre”进行硬编码,它会起作用,现在可以通过表单工作,因为由于编码差异,它与“è”不匹配,并按原样传递。如果我使用 'LeLievre' 是行不通的

标签: encoding asp-classic


【解决方案1】:

尝试使用 UTF-8 编码保存您的经典 asp。

我不知道您使用哪个编辑器,但大多数编辑器(Notepad++、Textpad、...)可以另外指定应该使用哪种编码来保存它本身的 asp 页面。

【讨论】:

  • 这实际上是问题所在,也是我自己尝试的第一件事。当然,我在正确设置 CodePage 属性之前尝试过它,所以它看起来好像没有任何区别。非常感谢您提醒我这一点,现在一切正常!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
相关资源
最近更新 更多