gpt4 book ai didi

java - 通过 Java 创建时 Linux 上的文件名编码问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:09 27 4
gpt4 key购买 nike

我遇到了一个问题,而且我已经被这个问题困扰了一段时间了。问题是,我无法让文件名支持特殊字符(只有文件名,文件内容可以)。文件名不是用问号创建的。

现在,据我所知(我很可能会遗漏一些非常明显的东西),Linux 本身已正确设置。 Locale 命令将打印出以下内容,我认为这很好:

    LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

这是我为测试目的而编写的 Java 代码。并不是所有的东西都可以让事情变得清晰(比如finally block ),但重要的是一切。我还尝试使用 BufferedOutputStream 主题的变体,但结果是相同的。

    String exampleString="I'm in the file: \u0160 \u0161 \u010C \u010D";
String filename="I'm the filename \u0160\u0161\u010C\u010D.txt";

FileOutputStream fos = null;
InputStream is = null;
try {

fos = new FileOutputStream(transferDir.getPath()
+ File.separator + "_"
+ filename);

is = new ByteArrayInputStream(exampleString.getBytes(StandardCharsets.UTF_8));

byte[] buffer = new byte[4096];
int counter;
while ((counter = is.read(buffer)) != -1) {
fos.write(buffer, 0, counter);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

我还尝试使用 file.encodingsun.jnu.encoding 属性启动程序,但这没有任何改变。

我开始怀疑真相是否真的存在,所以任何帮助将不胜感激。

最佳答案

在哪里可以看到文件名中的问号?可能是您尝试执行 ls -l (或其他任何操作)的控制台根本没有适本地呈现外来字符的字形。

创建这样的文件后,尝试使用预期的名称和带问号的名称打开它。您很快就会知道名称本身在文件创建过程中是否真的被搞乱了。

关于java - 通过 Java 创建时 Linux 上的文件名编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30868367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com