В MS Dynamics есть проблема, когда она не позволяет использовать символы вне диапазона от x20 до x7f, а некоторые символы в этом диапазоне также недопустимы. Мой ответ состоял в том, чтобы создать массив, связанный с недопустимыми символами, возвращая лучшее предположение действительных символов.
Это не красиво, но работает.
Function PlainAscii(InText)
Dim i, c, a
Const cUTF7 = "^[\x20-\x7e]+$"
Const IgnoreCase = False
PlainAscii = ""
If InText = "" Then Exit Function
If RegExTest(InText, cUTF7, IgnoreCase) Then
PlainAscii = InText
Else
For i = 1 To Len(InText)
c = Mid(InText, i, 1)
a = Asc(c)
If a = 10 Or a = 13 Or a = 9 Then
' Do Nothing - Allow LF, CR & TAB
ElseIf a < 32 Then
c = " "
ElseIf a > 126 Then
c = CvtToAscii(a)
End If
PlainAscii = PlainAscii & c
Next
End If
End Function
Function CvtToAscii(inChar)
' Maps The Characters With The 8th Bit Set To 7 Bit Characters
Dim arrChars
arrChars = Array(" ", " ", "$", " ", ",", "f", """", " ", "t", "t", "^", "%", "S", "<", "O", " ", "Z", " ", " ", "'", "'", """", """", ".", "-", "-", "~", "T", "S", ">", "o", " ", "Z", "Y", " ", "!", "$", "$", "o", "$", "|", "S", " ", "c", " ", " ", " ", "_", "R", "_", ".", " ", " ", " ", " ", "u", "P", ".", ",", "i", " ", " ", " ", " ", " ", " ", "A", "A", "A", "A", "A", "A", "A", "C", "E", "E", "E", "E", "I", "I", "I", "I", "D", "N", "O", "O", "O", "O", "O", "X", "O", "U", "U", "U", "U", "Y", "b", "B", "a", "a", "a", "a", "a", "a", "a", "c", "e", "e", "e", "e", "i", "i", "i", "i", "o", "n", "o", "o", "o", "o", "o", "/", "O", "u", "u", "u", "u", "y", "p", "y")
CvtToAscii = arrChars(inChar - 127)
End Function
Function RegExTest(ByVal strStringToSearch, strExpression, IgnoreCase)
Dim objRegEx
On Error Resume Next
Err.Clear
strStringToSearch = Replace(Replace(strStringToSearch, vbCr, ""), vbLf, "")
RegExTest = False
Set objRegEx = New RegExp
With objRegEx
.Pattern = strExpression '//the reg expression that should be searched for
If Err.Number = 0 Then
.IgnoreCase = CBool(IgnoreCase) '//not case sensitive
.Global = True '//match all instances of pattern
RegExTest = .Test(strStringToSearch)
End If
End With
Set objRegEx = Nothing
On Error Goto 0
End Function
Ваш ответ обязательно будет другим.