Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么没有URLEncoder.encode(字符串,字符集),URLDecoder.decode(字符串,字符集)_Java_Character Encoding_Urlencode_Urldecode - Fatal编程技术网

Java 为什么没有URLEncoder.encode(字符串,字符集),URLDecoder.decode(字符串,字符集)

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()输入一个拼写正确的编码名称,该

我不确定SOF是否是问这个问题的最佳场所,但我想了解一下java和

对于URLEncoder,它具有方法
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开发人员提出,而不是这样。