两个 XML 个文件。行数大致相同。一个是另一个的两倍大。如何?
Two XML files. Roughly same number of lines. One is twice the size of the other. How?
我一直在使用 Access 和 VBA 生成 XML 站点地图。我要求我们的开发人员实施一个服务器端解决方案,这样就可以 运行 每晚都不需要我记得去做。
我通过将文本写入文件来生成文件。很简单的。我的文件大约有 1800KB。
开发人员的解决方案将文本写入文件(使用 XmlWriter VB class)。他的文件大约有 900KB。
当他第一次向我展示这个时,我以为他从站点地图中遗漏了很多数据。当我检查每行的行数时,只有 38 行差异(在大约 22,500 行文本中)。
怎么会这样?
不确定这是否是 post 这个正确的 stackexchange 站点,但我不知道更合适的站点。
编辑
这里是文件的例子
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.bodykind.com/index.aspx</loc>
</url>
<url>
<loc>http://www.bodykind.com/category/3-Supplements.aspx</loc>
</url>
<url>
<loc>http://www.bodykind.com/category/4-Wellbeing.aspx</loc>
</url>
...
两个文件几乎完全相同,但 的顺序不同,一个比另一个多 36 行。
编辑 2
我刚刚检查了文档属性。看起来900KB文件的代码集是UTF-8,而1800KB文件的代码集是Unicode。我假设这就是为什么会有如此大的差异?
编辑 3
由于即将关闭,这里是两者的代码
我的VB一个
Private Sub Class_Initialize()
pIndent = True
Set objADO = CreateObject("ADODB.Stream")
objADO.Type = 2
objADO.Charset = "utf-8"
objADO.LineSeparator = 10
objADO.Open
objADO.WriteText "<?xml version=""1.0"" encoding=""UTF-8""?>", 1
End Sub
... some code which writes the text to the file
Public Sub SaveToFile(ByVal PATH As String)
' Skip the BOM
objADO.Position = 3
Dim BinaryStream As Object
Set BinaryStream = CreateObject("ADODB.stream")
BinaryStream.Type = 1
BinaryStream.Mode = adModeReadWrite
BinaryStream.Open
'Strips BOM (first 3 bytes)
objADO.CopyTo BinaryStream
objADO.flush
objADO.Close
BinaryStream.SaveToFile PATH, 2
BinaryStream.flush
BinaryStream.Close
Set BinaryStream = Nothing
Set objADO = Nothing
End Sub
开发者解决方案
Using writer As New XmlTextWriter(Server.MapPath(filename), Encoding.UTF8)
writer.WriteStartDocument()
writer.WriteStartElement("urlset")
writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9")
writer.Formatting = Formatting.Indented
writer.WriteStartElement("url")
writer.WriteElementString("loc", domain + "/index.aspx")
writer.WriteEndElement()
writer.WriteStartElement("url")
writer.WriteElementString("loc", domain + "/aboutus.aspx")
writer.WriteEndElement()
... and so on....
如果是两倍大小,那么一个是UTF-8(较小的),一个是UTF-16(较大的)。在 UTF-16 中,每个 ASCII 字符占用的空间 space 是 UTF-8 中的两倍。
(Unicode 表示(在 Windows 中)UTF-16)。
我一直在使用 Access 和 VBA 生成 XML 站点地图。我要求我们的开发人员实施一个服务器端解决方案,这样就可以 运行 每晚都不需要我记得去做。
我通过将文本写入文件来生成文件。很简单的。我的文件大约有 1800KB。
开发人员的解决方案将文本写入文件(使用 XmlWriter VB class)。他的文件大约有 900KB。
当他第一次向我展示这个时,我以为他从站点地图中遗漏了很多数据。当我检查每行的行数时,只有 38 行差异(在大约 22,500 行文本中)。
怎么会这样?
不确定这是否是 post 这个正确的 stackexchange 站点,但我不知道更合适的站点。
编辑
这里是文件的例子
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.bodykind.com/index.aspx</loc>
</url>
<url>
<loc>http://www.bodykind.com/category/3-Supplements.aspx</loc>
</url>
<url>
<loc>http://www.bodykind.com/category/4-Wellbeing.aspx</loc>
</url>
...
两个文件几乎完全相同,但
编辑 2
我刚刚检查了文档属性。看起来900KB文件的代码集是UTF-8,而1800KB文件的代码集是Unicode。我假设这就是为什么会有如此大的差异?
编辑 3
由于即将关闭,这里是两者的代码
我的VB一个
Private Sub Class_Initialize()
pIndent = True
Set objADO = CreateObject("ADODB.Stream")
objADO.Type = 2
objADO.Charset = "utf-8"
objADO.LineSeparator = 10
objADO.Open
objADO.WriteText "<?xml version=""1.0"" encoding=""UTF-8""?>", 1
End Sub
... some code which writes the text to the file
Public Sub SaveToFile(ByVal PATH As String)
' Skip the BOM
objADO.Position = 3
Dim BinaryStream As Object
Set BinaryStream = CreateObject("ADODB.stream")
BinaryStream.Type = 1
BinaryStream.Mode = adModeReadWrite
BinaryStream.Open
'Strips BOM (first 3 bytes)
objADO.CopyTo BinaryStream
objADO.flush
objADO.Close
BinaryStream.SaveToFile PATH, 2
BinaryStream.flush
BinaryStream.Close
Set BinaryStream = Nothing
Set objADO = Nothing
End Sub
开发者解决方案
Using writer As New XmlTextWriter(Server.MapPath(filename), Encoding.UTF8)
writer.WriteStartDocument()
writer.WriteStartElement("urlset")
writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9")
writer.Formatting = Formatting.Indented
writer.WriteStartElement("url")
writer.WriteElementString("loc", domain + "/index.aspx")
writer.WriteEndElement()
writer.WriteStartElement("url")
writer.WriteElementString("loc", domain + "/aboutus.aspx")
writer.WriteEndElement()
... and so on....
如果是两倍大小,那么一个是UTF-8(较小的),一个是UTF-16(较大的)。在 UTF-16 中,每个 ASCII 字符占用的空间 space 是 UTF-8 中的两倍。
(Unicode 表示(在 Windows 中)UTF-16)。