В этом сценарии я бы, вероятно, создал бы COM-компонент, который принимает строку и запускает ее через WideCharToMultiByte , чтобы преобразовать ее в UTF-8.
Если вы действительно хотите остаться в VBScript, я просто взломал очень быстрое и очень грязное преобразование UTF-8 ...
Function Utf8(ByVal c)
Dim b1, b2, b3
If c < 128 Then
Utf8 = chr(c)
ElseIf c < 2048 Then
b1 = c Mod 64
b2 = (c - b1) / 64
Utf8 = chr(&hc0 + b2) & chr(&h80 + b1)
ElseIf c < 65536 Then
b1 = c Mod 64
b2 = ((c - b1) / 64) Mod 64
b3 = (c - b1 - (64 * b2)) / 4096
Utf8 = chr(&he0 + b3) & chr(&h80 + b2) & chr(&h80 + b1)
End If
End Function
Просто откройте файл с помощью Scripting.FileSystemObject, используя системную кодировку по умолчанию. Затем передайте каждый символ строки, которую вы хотите написать, через эту функцию.
ПРИМЕЧАНИЕ , что функция ожидает кодовую точку Unicode, поэтому обязательно используйте AscW()
вместо простого Asc()
:
For i = 1 to Len(s)
file.Write Utf8(AscW(Mid(s, i, 1)))
Next