如果我想在Java中使用以下URL:
...我应该使用String来处理什么句柄。
到目前为止,我一直无法处理那个String,我所拥有的只是????字符。
感谢。
于2012.09.09修改:
package pruebas;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Vector;
public class Prueba03
{
public static void main(String argumentos[])
{
Vector<String> listaURLs = new Vector<String>();
listaURLs.add("http://президент.рф/");
listaURLs.add("http://www.中国政府.政务.cn");
listaURLs.add("http://www.原來我不帥.cn/");
listaURLs.add("http://وزارة-الأتصالات.مصر/");
URL currentURL;
URLConnection currentConnection;
int currentSize;
for(int i=0; i<listaURLs.size(); i++)
{
try
{
System.out.println(URLDecoder.decode(listaURLs.get(i), URLEncoder.encode(listaURLs.get(i), "UTF-8")));
} // End of the try.
catch(UnsupportedEncodingException uee)
{
uee.printStackTrace();
} // End of the catch.
catch(Exception e)
{
e.printStackTrace();
} // End of the catch.
try
{
currentURL = new URL(listaURLs.get(i));
System.out.println("currentURL" + " = " + currentURL);
currentConnection = currentURL.openConnection();
System.out.println("currentConnection" + " = " + currentConnection);
currentSize = currentConnection.getContentLength();
System.out.println("currentSize" + " = " + currentSize);
} // End of the try.
catch(Exception e)
{
e.printStackTrace();
} // End of the catch.
} // End of the for.
} // End of the main method.
} // End of the Prueba02 class.
答案 0 :(得分:0)
对于域名,您应该使用Punycode转换unicode主机名。 Punycode是一种将unicode字符串转换为ascii字符串的方法。
以下链接显示了将Unicode域名转换为国际域名的JAVA方法。 https://docs.oracle.com/javase/6/docs/api/java/net/IDN.html#toASCII(java.lang.String)
URL u = new URL(url);
String host = u.getHost();
String[] labels = host.split("\\.");
for (int i = 0; i < labels.length; i++) {
labels[i] = java.net.IDN.toUnicode(labels[i]);
}
host = StringUtils.join(labels, ".");
System.out.println(host);
此外,您可以使用在线punycode转换器测试一些unicode URL。 https://www.punycoder.com/
例如,&#34; http://www.中国政府.政务.cn&#34;转换为&#34; http://www.xn--fiqs8sirgfmh.xn--zfr164b.cn/&#34;。
答案 1 :(得分:-1)
您可以尝试以下代码:
import java.net.URLDecoder;
import java.net.URLEncoder;
public class Test7 {
public static void main(String[] args) throws Exception {
String str = "http://www.中国政府.政务.cn";
System.out.println(URLDecoder.decode(str, URLEncoder.encode(str,
"UTF-8")));
}
}
答案 2 :(得分:-2)
不确定“解析”是什么意思 - 你打算用这些部分做什么?
据我所知,阿拉伯语和俄语都是UTF-8支持的。
不确定你的数据源是什么(可能是某种类型的流?)但是String有一个接受所需编码的CTOR。
你应该能够获得一个不包含???的字符串如果您使用此CTOR(使用“UTF-8”参数)
答案 3 :(得分:-2)
您可以尝试使用以下内容:
String pageUrl = "http://www.中国政府.政务.cn";
try
{
URL url = new URL(pageUrl);
System.out.println(url.toURI().toASCIIString());
}
catch (MalformedURLException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (URISyntaxException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
结果如预期: http://www.%E4%B8%AD%E5%9B%BD%E6%94%BF%E5%BA%9C.%E6%94%BF%E5%8A%A1.cn
但转换为URI
有其自身的劣势,您应该将'|', '"', '#'
等特殊字符手动替换为URL
编码。