我有一个为Google网站站长工具生成XML站点地图的程序(其中包括) GWT为我提供了一些站点地图的错误,因为URL包含¾,ã<,ã€等字符序列。**
GWTs说:
我们要求您的Sitemap文件采用UTF-8编码(通常可以在保存文件时执行此操作)。与所有XML文件一样,任何数据值(包括URL)都必须使用字符的实体转义码:&amp; ,',“, &lt; ,&gt; 。
特殊字符在XML文件中展开(使用HTML实体) XML文件片段:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://domain/folder/listing-ã.shtml</loc>
...
我的网址是UTF-8编码的吗?
如果没有,我如何在Java中执行此操作?
以下是我的程序中的行,我将URL添加到站点地图:
siteMap.addUrl(StringEscapeUtils.escapeXml(countryName+"/"+twoCharFile.getRelativeFileName().toLowerCase()));
** =我不确定哪些是导致错误的,可能是前两个例子。
我为所有的编辑道歉。
答案 0 :(得分:16)
尝试使用URLEncoder.encode(stringToBeEncoded, "UTF-8")
对网址进行编码。
答案 1 :(得分:2)
网址必须按照URI spec进行百分比编码。
例如,代码点U + 00e3(ã)将成为编码序列%C3%A3
。
在XML文档中发出URI时,它必须符合XML的标记要求。
例如,URI http://foo/bar?a=b&x=%C3%A3
变为http://foo/bar?a=b&x=%C3%A3
。 &符是XML中的escape character。
您可以找到有关URI编码here的详细讨论。
答案 2 :(得分:2)
请勿在URL中使用percentage encoding个字符entity escapes的网址中混淆{{3}}个非ASCII字符。在创建XML站点地图时,您需要同时执行这两项操作。
诚实地阅读你的原帖,似乎有点时髦,因为你提到的人物让我想起转换失败的时候:)
使用UTF-8时,您确定这些字符是否真的属于您的网址?
答案 3 :(得分:1)
URL中的所有非ascii字符必须是'x-url-encoding'编码。
以下是解释它的维基链接:http://en.wikipedia.org/wiki/Percent-encoding。
此外,所有XML特殊符号(&, >, <, etc.
)也必须进行转义。
Jai's answer显示了对任意字符串进行x-url编码的正确方法。但请注意,它不会执行XML转义。