首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >File.toURI不编码加号

File.toURI不编码加号
EN

Stack Overflow用户
提问于 2017-10-09 10:30:30
回答 5查看 1.7K关注 0票数 4

我只想用这个问题来检查我自己的理智。我有一个文件名,其中包含一个+ (加号)字符,它在某些操作系统和文件系统(例如MacOS和HFS+)上完全有效。

然而,我看到一个问题,我认为java.io.File#toURI()的操作不正确。

例如:

代码语言:javascript
复制
new File("hello+world.txt").toURI().toString()

在我的Mac机器上返回:

代码语言:javascript
复制
file:/Users/aretter/code/rocksdb/hello+world.txt

但是IMHO,这是不正确的,因为文件名中的+ (加号)字符没有在URI中编码。URI根本不表示原始文件名,URI中的+与文件名中的+字符的含义非常不同。

因此,如果我们解码URI,加号将被替换为(空格)字符,并且我们丢失了信息。例如:

代码语言:javascript
复制
URLDecoder.decode(new File("hello+world.txt").toURI().toURL().toString)

其结果是:

代码语言:javascript
复制
file:/Users/aretter/code/rocksdb/hello world.txt

相反,我所期望的是:

代码语言:javascript
复制
new File("hello+world.txt").toURI().toString()

其结果是:

代码语言:javascript
复制
file:/Users/aretter/code/rocksdb/hello+world.txt

因此,在以后使用和解码时,加号将被保留。

我很难相信这样一个明显的错误可能存在于Java中。有人能指出我哪里弄错了吗?

另外,如果有解决办法,我想听听吗?请记住,我实际上并不是将静态字符串作为文件名提供给File,而是从磁盘读取文件目录,其中一些文件可能包含一个+ (加号)字符。

EN

Stack Overflow用户

发布于 2017-10-09 10:32:24

尝试用反斜杠\转义加号,所以请这样做

代码语言:javascript
复制
new File("hello\+world.txt").toURI().toString()
票数 -1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46644306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档