我编写了一个 VBScript 代码来打印希腊字符。 这里的问题是字符显示不正确,即使在我尝试使用 UTF-8 进行编码后也是如此。
我在下面发布我的 VBScript 代码:
MsgBox("Θραύσεις Κρυστάλλων") 'The text here appears as weird unreadable symbols because of the current default encoding
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 2 'text
stream.Position = 0
stream.Charset = "utf-8"
stream.WriteText "Θραύσεις Κρυστάλλων" 'here i supply the text again, to the Stream
stream.Flush
stream.Position = 0
stream.Type = 1 'binary
stream.Read(3) 'skip BOM
utfStr = stream.Read
stream.Close
Set stream = Nothing
MsgBox(utfStr) 'Here I print the UTF8-encoded string from the stream. It appears different from the 1st messagebox, but still incorrectly
我可能会错过什么?我应该通过文本文件提供希腊文本,并避免使用变量吗?
提前致谢!
VBScript 不支持 UTF-8。它将把 UTF-8 作为 ANSI 处理,因此您可以读写 UTF-8 文件(因为它只是作为字节流处理),但无法正确显示 UTF-8 编码的字符。您有两个选择:
将脚本另存为 UTF-16 LE
MsgBox 将正确显示字符。
请注意,就像任何其他 VBS 脚本一样,消息框对话框将使用 DPI 虚拟化在设置为高于 100% 缩放比例的显示器上显示。这使得显示模糊。
将 VBS 脚本嵌入保存为 UTF-8 的 HTA 中
在此示例中,HTA 窗口通过将其移出屏幕来隐藏。如果您希望构建更复杂的界面,那么您可以将 HTA 窗口保留在屏幕上并使用 HTML/CSS 来构建 GUI。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" http-equiv="X-UA-Compatible" content="IE=11">
<script language="VBScript">
Window.MoveTo 999999999,999999999
MsgBox "Θραύσεις Κρυστάλλων"
</script>
</head>
<body>
</body>
</html>
未使用DPI虚拟化。无论显示比例设置如何,消息框都会以正确的尺寸清晰显示。