Luc*_*cas 6 java encoding uri file
我有一个servlet,需要写出具有用户可配置名称的文件.我正在尝试使用URI编码来正确转义特殊字符,但JRE似乎会自动将编码的正斜杠%2F转换为路径分隔符.
例:
File dir = new File("C:\Documents and Setting\username\temp");
String fn = "Top 1/2.pdf";
URI uri = new URI( dir.toURI().toASCIIString() + URLEncoder.encoder( fn, "ASCII" ).toString() );
File out = new File( uri );
System.out.println( dir.toURI().toASCIIString() );
System.out.println( URLEncoder.encode( fn, "ASCII" ).toString() );
System.out.println( uri.toASCIIString() );
System.out.println( output.toURI().toASCIIString() );
Run Code Online (Sandbox Code Playgroud)
输出是:
file:/C:/Documents%20and%20Settings/username/temp/
Top+1%2F2.pdf
file:/C:/Documents%20and%20Settings/username/temp/Top+1%2F2.pdf
file:/C:/Documents%20and%20Settings/username/temp/Top+1/2.pdf
Run Code Online (Sandbox Code Playgroud)
在实例化新的File对象之后,%2F序列会自动转换为正斜杠,并且最终会出现错误的路径.有人知道解决这个问题的正确方法吗?
问题的核心似乎就是这样
uri.equals( new File(uri).toURI() ) == FALSE
Run Code Online (Sandbox Code Playgroud)
当%2FURI中有一个时.
我打算只是逐字地使用URLEncoded字符串而不是尝试使用File(uri)构造函数.
该new File(URI)结构由由此获得的路径上的文件URI#getPath(),而不是你expected- -什么URI#getRawPath().这看起来像是"按设计"的特征.
你有2个选择:
URLEncoder#encode()在fn两次(注意:encode()不是encoder()).new File(String)改用.| 归档时间: |
|
| 查看次数: |
9552 次 |
| 最近记录: |