编码URL的百分比被Google Earth破坏

编码URL的百分比被Google Earth破坏,url,kml,google-earth,Url,Kml,Google Earth,在谷歌地球消费的KML文件中,我使用谷歌图表动态图标,其URL包含百分比编码字符,例如。从拦截网络呼叫可以看出,%E2%80%A2(项目符号)被Google Earth损坏为%C3%A2%C2%80%C2%A2,这导致图标检索失败。问题是KML规范非常模糊:对于IconStyle图标href元素,它只会说它是“用于加载图标的HTTP地址[…]”。那么,谷歌能否澄清谷歌地球的期望,以及如何使KML文件中带有百分比编码字符的图标URL正常工作 请不要让我为上面的URL不知何故不正确而感到悲伤:它在浏

在谷歌地球消费的KML文件中,我使用谷歌图表动态图标,其URL包含百分比编码字符,例如。从拦截网络呼叫可以看出,%E2%80%A2(项目符号)被Google Earth损坏为%C3%A2%C2%80%C2%A2,这导致图标检索失败。问题是KML规范非常模糊:对于IconStyle图标href元素,它只会说它是“用于加载图标的HTTP地址[…]”。那么,谷歌能否澄清谷歌地球的期望,以及如何使KML文件中带有百分比编码字符的图标URL正常工作

请不要让我为上面的URL不知何故不正确而感到悲伤:它在浏览器中运行良好(在用符号替换
;
之后),并且有一个类似的例子

实际的KML示例文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
  <Folder>
    <Placemark>
      <Style>
        <IconStyle>
          <scale>1.6</scale>
          <Icon>
            <!-- doesn't work -->
            <href>http://chart.apis.google.com/chart?chst=d_map_pin_letter_withshadow&#x26;chld=%E2%80%A2|cccccc|000000</href>
          </Icon>
        </IconStyle>
      </Style>
      <Point>
        <coordinates>-3.67,40.51</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <Style>
        <IconStyle>
          <scale>1.6</scale>
          <Icon>
            <!-- works -->
            <href>http://chart.apis.google.com/chart?chst=d_map_pin_letter_withshadow&#x26;chld=O|cccccc|000000</href>
          </Icon>
        </IconStyle>
      </Style>
      <Point>
        <coordinates>-3.68,40.52</coordinates>
      </Point>
    </Placemark>
  </Folder>
</Document>
</kml>

1.6
http://chart.apis.google.com/chart?chst=d_map_pin_letter_withshadow&chld=%E2%80%A2 |中交| 000000
-3.67,40.51
1.6
http://chart.apis.google.com/chart?chst=d_map_pin_letter_withshadow&chld=O |中交| 000000
-3.68,40.52

经过长时间的平静之后,我回到这个问题上,找到了答案。即使您正在插入一个URL,因此URL编码准则应该适用,KML希望特殊的实体是Unicode的,而不是URL编码的,即使是在URL中!换言之,您需要:

<href>http://chart.apis.google.com/chart?chst=d_map_pin_letter_withshadow&#x26;chld=&#x2022;|cccccc|000000</href>
http://chart.apis.google.com/chart?chst=d_map_pin_letter_withshadow&chld=&x2022|中交| 000000

回想起来,它需要“;”的符号,这应该让我走上正确的道路,但事后诸葛亮总是20/20…

这很奇怪。请注意,这不是编码,因为您可以对其他参数进行编码(例如CCCC=>%63…)。图表api似乎不想返回某些特定字符,但另一方面,在Firefox中访问这些字符时,它工作正常(返回了正确的图像)。真奇怪。(虽然我确实确认在wireshark中看到了更改的编码…)。我想你是对的;在某个地方,编码被破坏了(在某种程度上,这对我来说不是很明显)。我认为这是一个bug。你能提供更多关于哪些字符需要转义的细节吗?