在Windows 7上使用MS Access 2003,我发现以下函数从ANSI字符串中删除所有重音,更改(例如)señor到senor:
Public Function RemoveAccents(ByVal inputString As String) As String
Const accentString As String = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóóôõöùúûüýÿ"
Const nonAccentStr As String = "AAAAAACEEEEIIIIINOOOOOUUUUYaaaaaaceeeeiiiionoooooouuuuyy"
Dim i As Integer
For i = 1 To Len(accentString)
inputString = Replace(inputString, Mid(accentString, i, 1), Mid(nonAccentStr, i, 1), , , vbBinaryCompare)
Next i
RemoveAccents = inputString
End Function
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将带有Caron(U-010D)(č)(HTMLč)的拉丁小写字母C添加到函数Const accentString时,就像这样,
Const accentString As String = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåç" & ChrW$(&H10D) & "èéêëìíîïðñòóóôõöùúûüýÿ"
Const nonAccentStr As String = "AAAAAACEEEEIIIIINOOOOOUUUUYaaaaaacceeeeiiiionoooooouuuuyy"
Run Code Online (Sandbox Code Playgroud)
我无法运行该功能.是否有一种语法允许我调整此函数以从包含不在ANSI字符集中的字符的字符串中去除变音符号?
您不能拥有像ChrW()常量声明中那样的函数。
修改
\n\n如果您可以创建这些公共变量而不是常量,那么这应该会为您解决这个问题:
\n\nConst cWithCaron As String = &H10D\nPublic accentString As String\nPublic nonAccentStr As String\n\n\nSub TestStrings()\nDim clnString As String\n\n accentString = "\xc3\x80\xc3\x81\xc3\x82\xc3\x83\xc3\x84\xc3\x85\xc3\x87\xc3\x88\xc3\x89\xc3\x8a\xc3\x8b\xc3\x8c\xc3\x8d\xc3\x8e\xc3\x8f\xc3\x8f\xc3\x91\xc3\x92\xc3\x93\xc3\x94\xc3\x95\xc3\x96\xc3\x99\xc3\x9a\xc3\x9b\xc3\x9c\xc3\x9d\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4\xc3\xa5\xc3\xa7" & ChrW(cWithCaron) & "\xc3\xa8\xc3\xa9\xc3\xaa\xc3\xab\xc3\xac\xc3\xad\xc3\xae\xc3\xaf\xc3\xb0\xc3\xb1\xc3\xb2\xc3\xb3\xc3\xb3\xc3\xb4\xc3\xb5\xc3\xb6\xc3\xb9\xc3\xba\xc3\xbb\xc3\xbc\xc3\xbd\xc3\xbf"\n\n nonAccentStr = "AAAAAACEEEEIIIIINOOOOOUUUUYaaaaaacceeeeiiiionoooooouuuuyy"\n \'I added this variable to test the function:\n clnString = RemoveAccents(accentString)\n \'And a message box to display the results:\n MsgBox clnString = nonAccentStr\n\nEnd Sub\n\nPublic Function RemoveAccents(ByVal inputString As String) As String\n\nDim i As Integer\n\n For i = 1 To Len(accentString)\n\n inputString = Replace(inputString, Mid(accentString, i, 1), Mid(nonAccentStr, i, 1), , , vbBinaryCompare)\n Next i\n\n RemoveAccents = inputString\n\nEnd Function\nRun Code Online (Sandbox Code Playgroud)\n