Java 为什么没有URLEncoder.encode(字符串,字符集),URLDecoder.decode(字符串,字符集)
我不确定SOF是否是问这个问题的最佳场所,但我想了解一下java和 对于URLEncoder,它具有方法Java 为什么没有URLEncoder.encode(字符串,字符集),URLDecoder.decode(字符串,字符集),java,character-encoding,urlencode,urldecode,Java,Character Encoding,Urlencode,Urldecode,我不确定SOF是否是问这个问题的最佳场所,但我想了解一下java和 对于URLEncoder,它具有方法encode(String,String),其中第二个参数是要使用的编码的名称。如果编码无效,则引发不支持的编码异常。这是一个选中的异常,因此在调用encode()时必须使用try-catch语句。这在使用字符串编码方面是有意义的 但是Java内置了类,您可以使用或轻松访问您最喜欢的编码的Charset对象。这将防止需要捕获一个异常,您知道如果您为encode()输入一个拼写正确的编码名称,该
encode(String,String)
,其中第二个参数是要使用的编码的名称。如果编码无效,则引发不支持的编码异常。这是一个选中的异常,因此在调用encode()
时必须使用try-catch语句。这在使用字符串编码方面是有意义的
但是Java内置了类,您可以使用或轻松访问您最喜欢的编码的Charset
对象。这将防止需要捕获一个异常,您知道如果您为encode()
输入一个拼写正确的编码名称,该异常将永远不会被抛出。如果不能使用像URLEncoder.encode(String,Charset)
这样的方法,我编写的代码会变得非常难看,因为我需要存储一个额外的字符串变量来存储编码名称,并且我有一个非常冗余的try-catch语句,如下所示:
private static final String utf8 = "UTF-8";
...
String msg = ...;
try {
String encodedMsg = URLEncoder.encode(msg, utf8);
...
} catch (UnsupportedEncodingException e) {
// This exception should never happen
System.err.println("Uh oh...");
}
应用于urldecker.decode(字符串,字符串)
的逻辑相同
因此,我只是想知道,为什么Java没有URLEncoder.encode(String,Charset)
也没有urldecker.decode(String,Charset)
?Java语言的开发人员是否有任何支持这一点的计划?它将把我上面写的多行怪物变成一个更令人愉快的单行,不需要我抓住一个例外,我知道除非政府将UTF-8定为犯罪,否则永远不会发生。是否有任何现有的实现或库可以改进URLEncoder和URLDecoder缺少的功能?我试着在番石榴中搜索一些东西,但什么也没找到。我不能肯定,但我的猜测只是时间问题——URLDecover是用JDK1.0发布的,Charset是后来用JDK1.4发布的
返回一个包含规范名称的字符串,您应该能够将其传递到decode(),而不必担心出现异常。我的猜测只是时间问题——URLDecover随JDK 1.0发布,Charset随JDK 1.4发布。返回规范名称,您应该能够将其传递到decode()
,而不必担心出现异常。@jedwards您应该回答这个问题。您不需要“存储额外的字符串变量”。那是你的选择。无论如何,编译器都会将所有的“UTF-8”集合在一起。关于未来Java开发的问题应该向未来的Java开发人员提出,而不是这样。