删除经典ASP / VBScript中的四字节UTF-8字符(MySQL相关)

时间:2014-03-10 14:00:03

标签: mysql unicode utf-8 vbscript asp-classic

我花了大约18个小时尝试不同的事情,现在四处寻找,最后我放弃了,不得不问你们。

Backstory:我最终将旧的MS Access数据库迁移到MySQL(版本5.6.16-log)。

问题:Access数据库中的某些Unicode文本包含四个字节(UTF-8)。

MySQL 仍然在插入四个字节的UTF-8字符时出现问题。这个问题已经老了,我很惊讶地发现它还没有修复:http://bugs.mysql.com/bug.php?id=67297

我正在使用“MySQL ODBC 5.3 Unicode Driver”在数据库之间传输数据(最新的beta开发版本)。无论我尝试什么,当我尝试插入具有4字节UTF8字符的字符串时,该过程最终冻结(该线程永远使用100%CPU)。尝试过在互联网上随处可见的所有变通办法,没有任何作用。

现在我将接受MySQL的限制:我无法存储所有Unicode字符。

所以我想在将其插入数据库之前从文本中删除所有4字节UTF8字符。但我不能为我的生活找到一种方法在经典的ASP中做到这一点。

有人可以帮忙吗?

(我不能不使用ASP顺便说一句,有太多的代码用另一种语言重写它。只是改变数据库是一个了不起的壮举;有几个,它需要几天才能完成。)< / p>

编辑:JScript中的解决方案也是可以接受的,因为它可以从ASP页面运行。

1 个答案:

答案 0 :(得分:0)

这应该有效:

Function UTF8Filter(strString)
    On Error Resume Next
    For i = 1 to Len(strString)

        charCode = AscW(Mid(strString, i, 1))
        If charCode > 32 or charCode <= 127 then
            'Append valid character'
            strString = Mid(strString, i, 1)
        End If
    Next

    UTF8Filter = strString
    On Error Goto 0
End Function

更新功能:

Function Remove4ByteUFT8(strString)
    Set objRegEx = CreateObject("VBScript.RegExp")
    objRegEx.Global = True   
    objRegEx.IgnoreCase = True
    objRegEx.Pattern = "/[\xF0-\xF7].../s"

    Remove4ByteUFT8 = objRegEx.Replace(strString, "")
End Function