ник: Дядя Федор
еще мулька
Function EncodeUTF8(S)
Dim I, c, utfc, b1, b2, b3
For I = 1 To Len(S)
c = ToLong(AscW(Mid(S, I, 1)))
Debug.Print I, Mid(S, I, 1), "c=" & c
If c < 128 Then
If (c = 13) Or (c = 10) Then
utfc = ChrW(c)
Else
utfc = Chr(c)
End If
ElseIf c < 2048 Then
b1 = c Mod &H40
b2 = (c - b1) / &H40
utfc = Chr(&HC0 + b2) & Chr(&H80 + b1)
ElseIf c < 65536 And (c < 55296 Or c > 57343) Then
b1 = c Mod &H40
b2 = ((c - b1) / &H40) Mod &H40
b3 = (c - b1 - (&H40 * b2)) / &H1000
utfc = Chr(&HE0 + b3) & Chr(&H80 + b2) & Chr(&H80 + b1)
Else
' Младший или старший суррогат UTF-16
utfc = Chr(&HEF) & Chr(&HBF) & Chr(&HBD)
End If
EncodeUTF8 = EncodeUTF8 + utfc
Debug.Print "utf=" & utfc
Next
End Function
Переводит хорошо, но теряет переводы строк.