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

问题描述 投票:0回答:1

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

背景故事:我终于将旧的 MS Access 数据库迁移到 MySQL(版本 5.6.16-log)。

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

MySQL still 在插入四个字节的 UTF-8 字符时存在问题。这个问题已经过时了,我惊讶地发现它还没有解决:http://bugs.mysql.com/bug.php?id=67297

我正在使用“MySQL ODBC 5.3 Unicode Driver”在数据库之间传输数据(最新的测试版开发版本)。无论我尝试什么,当我尝试插入包含 4 字节 UTF8 字符的字符串时,进程最终都会冻结(线程永远使用 100% CPU)。已经尝试了互联网上到处建议的所有解决方法,但没有任何效果。

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

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

有人可以帮忙吗?

(顺便说一句,我不能不使用 ASP,用不同的语言重写它的代码太多了。仅更改数据库就是一项了不起的壮举;数据库有好几个,需要几天才能完成。)

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

mysql unicode utf-8 vbscript asp-classic
1个回答
2
投票

这应该有效:

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

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

    UTF8Filter = strString
    On Error Goto 0
End Function

更新功能:

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

    Remove4ByteUTF8 = objRegEx.Replace(strString, "")
End Function
© www.soinside.com 2019 - 2024. All rights reserved.