【问题标题】:Convert UTF-8 file to UTF-16 BE file in Vbscript在 Vbscript 中将 UTF-8 文件转换为 UTF-16 BE 文件
【发布时间】:2023-03-16 05:13:01
【问题描述】:

VBscript中有没有办法将UTF-8转为UTF-16 BE?

我有以下代码,但只转换为 UTF-16 LE。 我需要输出为 UTF-16 BE。

Sub Utf8ToUtf16Le(fileIn,fileOut)

Set FSO = CreateObject("Scripting.FileSystemObject")
Set oStream = CreateObject ("ADODB.Stream")

    With oStream
        .Open
        .Type = adTypeText
        .Charset = "utf-8"
        .LoadFromFile fileIn
        FSO.OpenTextFile(fileOut, 2, True, True).Write .ReadText
        .Close
    End With

End Sub

【问题讨论】:

    标签: encoding utf-8 vbscript data-conversion utf-16


    【解决方案1】:
    Sub Utf8ToUtf16Le(fileIn,fileOut)
    Const adTypeText = 2
    Const adSaveCreateOverWrite = 2
    Dim inputStream
    
        Set inputStream = CreateObject("ADODB.Stream")
        With inputStream
            .Open
            .Type = adTypeText
            .Charset = "utf-8"
            .LoadFromFile fileIn
            .Position = 0
        End With 
    
        With CreateObject("ADODB.Stream")
            .Open
            .Type = adTypeText
            .Charset = "utf-16be"
            .WriteText inputStream.ReadText
            .Position = 0
            .SaveToFile fileOut, adSaveCreateOverWrite
            .Close
        End With
        inputStream.Close
    
    End Sub
    

    如果输出中需要BOM,我们可以用

    显式添加
        .Charset = "utf-16be"
        .WriteText ChrW(&hFEFF)
        .WriteText inputStream.ReadText
    

    或者,正如 Kul-Tigin 所指出的,我们可以将 .Charset 属性从 utf-16be 更改为 unicodeFEFF

    【讨论】:

    • 谢谢!效果很好!但我有一个问题:为什么我的fileOut 没有字节顺序标记?不是我需要的,我只是想了解...
    • @skrenato,只是猜测,但默认情况下,所有 vbs 字符串都是 UTF-16,可能编码器不认为需要 BOM。如果在某些时候您需要它,只需在 .WriteText inputStream.ReadText 之前添加 .WriteText ChrW(&hFEFF)
    • @skrenato 将字符集 utf-16be 替换为 unicodeFEFF 然后它将按您的预期工作。
    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2015-09-19
    • 2014-02-11
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多