我试图使用 Java 程序在 AIX 5.3 系统上获取包含特殊字符的文件名,但它用问号替换了特殊字符。这是在客户端环境中。但是当我在开发环境中使用相同的程序时,我无法重现该问题。
我尝试了 vfs2 和 jsch 库,但它们都遇到了同样的问题。这是我尝试过的示例代码-
package com.example.ftp;
import com.jcraft.jsch.*;
import java.util.Vector;
public class Elmer1 {
public static void main(String[] args) {
String host = "aix";
String username = "user";
int port = 22;
String password = "pass"; // Replace with your password
String remoteDirectory = "/disk1/users/usr1"; // Replace with the remote folder path
JSch jsch = new JSch();
Session session = null;
try {
// Create the session object
session = jsch.getSession(username, host, port);
session.setPassword(password); // Set password
// Create properties for key exchange, ciphers, and host key algorithms
java.util.Properties config = new java.util.Properties();
session.setConfig(config);
// Disable strict host key checking for testing purposes (optional)
session.setConfig("StrictHostKeyChecking", "no");
// Connect to the session
session.connect();
// Open an SFTP channel
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
// List files and directories in the remote directory
Vector<ChannelSftp.LsEntry> list = channelSftp.ls(remoteDirectory);
System.out.println("Contents of " + remoteDirectory + ":");
for (ChannelSftp.LsEntry entry : list) {
if (entry.getAttrs().isDir()) {
// It's a directory
System.out.println("[DIR] " + entry.getFilename());
} else {
// It's a file
System.out.println("[FILE] " + entry.getFilename());
}
}
// Disconnect when done
channelSftp.disconnect();
session.disconnect();
} catch (JSchException | SftpException e) {
e.printStackTrace();
}
}
}
开发环境中的输出-
Contents of /disk1/users/usr1:
[DIR] .
[DIR] ..
[FILE] 99-4±±±±0A02-|PART±ASSEMBLY,±SAMPLE±IV-X.model
不确定在客户环境中可能导致此问题的原因。感谢任何尝试解决此问题的指针/输入。
在生产主机上安装与开发主机上安装的相同的本地化包,例如
bos.loc.com.utf Common Locale Support - UTF-8
bos.loc.iso.en_US Base System Locale ISO Code Set - U.S. English
bos.loc.utf.EN_US Base System Locale UTF Code Set - U. S. English
确保环境变量
LC_CTYPE
在生产主机上的设置方式与在开发主机上的设置方式相同。 (Java属性file.encoding
和sun.jnu.encoding
是基于LC_CTYPE
设置的)