使用 VBScript 创建 MS Word 文件时出现编码问题

Encoding issue when creating MS Word file using VBScript

我正在尝试用 VBScript 编写一个脚本,它应该打开 Microsoft Word 并写下一些文本。 只要我正在编写的文本是英文的,该脚本就会按预期工作。 但是,当文本是希伯来语或中文时,我在 MS Word 中只会出现乱码。

我试图将脚本文件保存为 UTF-8,但在这次更改后我不能再 运行 它了。 我还尝试将它包装起来,使其成为一个 wsf 脚本,但它也没有用。 在 Google.

上找不到任何其他建议

这是剧本(这次我试着用希伯来语写“שלום”这个词)。

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set fso = CreateObject("Scripting.FileSystemObject")
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
objSelection.TypeText "שלום"

当我 运行 这个脚本时,它打开 MS word 并写下“ùìåí”而不是“שלום”。

您可以使用以下编码保存脚本文件:

  1. 美国标准。只能使用 256 个字符:0..127 是标准 ASCII,上半部分取决于您在系统设置中选择的语言环境,或者被 SetLocale().
  2. 覆盖
  3. Unicode(UCS-2 或 UTF-16,Little Endian)。如果保存有 BOM,或没有 BOM,它都有效。有 1 112 064 个可用字符。在我看来,这是让脚本正常工作的最简单方法。但是文件大小增加了 2 倍。
  4. UTF-8。以 Unicode 代码 space 编码任何符号。只有在没有 BOM 的情况下保存脚本才能 运行。
  5. UTF-8 作为 .wsf 文件,第一个标签 <?XML version="1.0" encoding="UTF-8"?>
  6. ANSI,但将所有字符串都放在 WScript.Echo ChrW(1513) & ChrW(1500) & ChrW(1493) & ChrW(1501).

Notepad++ 和 Notepad2 很方便,可以清楚地设置必要的编码。

关于第3项。一般情况下,Windows Script Host无法运行脚本文件以UTF-8编码带BOM,将UTF-8编码的无BOM文件的每个字节识别为ANSI 编码的字符,同时将文件下载到内存中。我可以建议一个解决方法,允许纠正错误识别的字符包含在变量中,但你知道,Unicode 是更好的方法。这是示例:

s = "שלום"
WScript.Echo s ' wrong encoding
r = FixChars(s)
WScript.Echo r ' שלום

Function FixChars(s)
    Dim r, p
    r = ""
    For p = 1 To Len(s)
        r = r & ChrB(Asc(Mid(s, p, 1)))
    Next
    With CreateObject("ADODB.Stream")
        .Type = 2
        .Mode = 3
        .Charset = "Unicode" ' HKLM\SOFTWARE\Classes\MIME\Database\Charset
        .Open
        .WriteText r
        .Position = 0
        .Charset = "UTF-8"
        r = .ReadText
        .Close
    End With
    Do While LeftB(r, 2) = ChrB(&HFD) & ChrB(&HFF)
        r = MidB(r, 3)
    Loop
    FixChars = r
End Function

你不应该通过 SetLocale() 从脚本开始到 FixChars() 完成更改语言环境,否则会报错。

下面的代码是第 4 项的示例:

<?XML version="1.0" encoding="UTF-8"?>
<job>
<script language="VBScript">
<![CDATA[
WScript.Echo "שלום"
]]>
</script>
</job>