Java、文件、Linux 和西里尔文

标签 java linux character-encoding tar

我尝试用 java 编写一个存档程序,它创建 TAR 或 ZIP 存档,具有正确的西里尔文文件名,然后它在 linux 中打开。 在 Windows 中,我使用来自 ant 的 org.apache.tools.zip:

ZipOutputStream.setEncoding("cp866"); 

得到它,但是 linux 中的 file roller(归档管理器)不理解它。在 org.apache.tools.tar 方法 setEncoding() 中不存在。我还尝试使用其他一些支持西里尔字母的编码,例如 cp1251、utf-8、koi-8r,但没有给出任何结果。

最佳答案

您的文件可能正在正确创建文件,问题出在 file-roller 上。 众所周知,它无法检测文件名的编码。参见 herehere .

尝试使用 unzip (文件名可能会出现乱码)或 p7zip直接从 shell(还有一个 java 版本 - j7zip)。

7zip 对我有用,它使用西里尔字符的 utf8 编码。 File roller、Ark 和所有其他实际上执行解压缩的程序都会破坏我系统中的文件名。

关于Java、文件、Linux 和西里尔文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240569/

相关文章:

java - 如何做进程异步?

java - 初学者 Swing

java - ObjectInputStream.readObject() 中的 ClassNotFoundException

linux - 我可以在仅 64 位主机内核上的 64 位 docker 容器中运行 32 位二进制文​​件吗?

java - 奇怪的字符编码

java - ExecutorService 与任务链关闭

linux - 为什么在 Bash 中应该避免使用 eval,我应该使用什么来代替?

linux - 监视创建文件的目录和子目录并获取创建文件的前 7 个字符?

java - 使用 Oracle 12c 和 ojdbc7/ojdbc8 驱动程序时出现无效字符

java - 如果我逐字节读取文件的内容不应该保持不变吗?