【发布时间】: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