我正在尝试在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字并写下“ùìåí”而不是“שלום”。
答案 0 :(得分:1)
您可以使用以下编码保存脚本文件:
SetLocale()
覆盖。.wsf
文件,第一个标记为<?XML version="1.0" encoding="UTF-8"?>
WScript.Echo ChrW(1513) & ChrW(1500) & ChrW(1493) & ChrW(1501)
。Notepad ++和Notepad2可以清楚地设置必要的编码。
关于第3项。通常,Windows脚本宿主无法以带有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>