UTF-8编码URL

时间:2011-05-23 11:28:43

标签: java encoding character-encoding sitemap google-webmaster-tools

的信息:

我有一个为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-&#227;&#129;.shtml</loc>
        ...

我的网址是UTF-8编码的吗?

如果没有,我如何在Java中执行此操作
以下是我的程序中的行,我将URL添加到站点地图:

    siteMap.addUrl(StringEscapeUtils.escapeXml(countryName+"/"+twoCharFile.getRelativeFileName().toLowerCase()));

** =我不确定哪些是导致错误的,可能是前两个例子。

我为所有的编辑道歉。

4 个答案:

答案 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&amp;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转义。