【发布时间】:2012-02-23 22:33:23
【问题描述】:
我有一个非常复杂的问题,很难正确解释。互联网上有很多关于这个的讨论,但没有一个确定的。任何帮助,或比我更好的解释,非常感谢。
本质上,我只是尝试使用带有 VBA 的 UTF-16 编写 XML 文件。
如果我这样做:
sXML = "<?xml version='1.0' encoding='utf-8'?>"
sXML = sXML & rest_of_xml_document
Print #iFile, sXML
然后我得到一个有效的 XML 文件。但是,如果我将“encoding=”更改为“utf-16”,我会从我的 XML 验证器中收到此错误:
Switch from current encoding to specified encoding not supported.
谷歌搜索告诉我,这意味着 xml 编码属性与文件使用的实际编码不同,因此我必须通过打开和打印命令创建一个 utf-8 文档。
如果我这样做:
With CreateObject("ADODB.Stream")
.Type = 2
.Charset = "utf-16"
.Open
.WriteText sXML
.SaveToFile sFilename, 2
.Close
End With
然后我的文件开头出现了一些时髦的字符(BOM),导致它无法通过 XML 验证。
如果我在 Notepad++ 中打开文件,删除 BOM 并将编码更改为“UCS-2”,则该文件使用“utf-16”编码值验证良好(这意味着 UCS-2 与 UTF 足够接近-16 没关系,或者 XML 能够在这两种类型之间Switch from current encoding。
我需要使用 UTF-16,因为 UTF-8 不能涵盖我正在导出的演示文稿中使用的所有字符。
问题:
如何让 VBA 表现得像 Notepad++,创建一个没有 BOM 的 UTF-16 编码文本文件,可以用 XML 数据填充?非常感谢任何帮助!
【问题讨论】:
-
你能用
.Charset = "utf-16le"吗? -
没有任何区别 :(
-
我相信你混淆了一些概念。一般参考请参阅joelonsoftware.com/articles/Unicode.html。
-
感谢 GSerg - 非常棒的阅读:)
标签: xml vba utf-16 byte-order-mark