Details
-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
jfx15
-
x86_64
-
linux_ubuntu
Description
ADDITIONAL SYSTEM INFORMATION :
System:
Ubuntu 20.04 LTS (5.4.0-58-generic, x64),
Java:
openjdk 15.0.1 2020-10-20
OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.1+9, mixed mode, sharing)
Other:
OpenJFX 15.0.1
A DESCRIPTION OF THE PROBLEM :
If one uses the FileChooser (https://openjfx.io/javadoc/15/javafx.graphics/javafx/stage/FileChooser.html) class to select an existing file from the file system with certain unicode characters in the real file path, the path of the returned File object is wrong.
For example, if the real file path is "/foo/🍀/bar.file", the returned File object of the FileChooser has the path "/foo/ð/bar.f".
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Open a file chooser dialogue
2. Select a file, which has at least one Character from the Miscellaneous Symbols and Pictographs Block in the file path
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The returned file object contains the correctly encoded and complete path.
ACTUAL -
The returned file object contains a wrongly encoded and truncated path.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.UUID;
/**
* Test App for JavaFX Bug
*/
public class App extends Application {
private static final String PROBLEMATIC_CHAR = "\uD83C\uDF40"; //FOUR LEAF CLOVER
private static final String tmpDir = System.getProperty("java.io.tmpdir");
private static Path workingDir;
private static Path expectedFile;
@Override
public void start(Stage stage) {
var fileChooser = new FileChooser();
fileChooser.setInitialDirectory(workingDir.toFile());
var chosenFile = fileChooser.showOpenDialog(stage);
if (chosenFile != null) {
if (!chosenFile.toPath().equals(expectedFile)) {
throw new IllegalStateException("Chosen path is not correct: " + chosenFile.getPath());
}
}
stage.close();
System.exit(0);
}
private static void prepare() throws IOException {
var dir = Files.createDirectories(Path.of(tmpDir).resolve(UUID.randomUUID()+"/" + PROBLEMATIC_CHAR));
workingDir = dir.getParent();
expectedFile = Files.createFile(dir.resolve("foo"));
}
public static void main(String[] args) throws IOException {
assert tmpDir != null;
prepare();
assert workingDir != null;
launch();
}
}
---------- END SOURCE ----------
FREQUENCY : always
System:
Ubuntu 20.04 LTS (5.4.0-58-generic, x64),
Java:
openjdk 15.0.1 2020-10-20
OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.1+9, mixed mode, sharing)
Other:
OpenJFX 15.0.1
A DESCRIPTION OF THE PROBLEM :
If one uses the FileChooser (https://openjfx.io/javadoc/15/javafx.graphics/javafx/stage/FileChooser.html) class to select an existing file from the file system with certain unicode characters in the real file path, the path of the returned File object is wrong.
For example, if the real file path is "/foo/🍀/bar.file", the returned File object of the FileChooser has the path "/foo/ð/bar.f".
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Open a file chooser dialogue
2. Select a file, which has at least one Character from the Miscellaneous Symbols and Pictographs Block in the file path
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The returned file object contains the correctly encoded and complete path.
ACTUAL -
The returned file object contains a wrongly encoded and truncated path.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.UUID;
/**
* Test App for JavaFX Bug
*/
public class App extends Application {
private static final String PROBLEMATIC_CHAR = "\uD83C\uDF40"; //FOUR LEAF CLOVER
private static final String tmpDir = System.getProperty("java.io.tmpdir");
private static Path workingDir;
private static Path expectedFile;
@Override
public void start(Stage stage) {
var fileChooser = new FileChooser();
fileChooser.setInitialDirectory(workingDir.toFile());
var chosenFile = fileChooser.showOpenDialog(stage);
if (chosenFile != null) {
if (!chosenFile.toPath().equals(expectedFile)) {
throw new IllegalStateException("Chosen path is not correct: " + chosenFile.getPath());
}
}
stage.close();
System.exit(0);
}
private static void prepare() throws IOException {
var dir = Files.createDirectories(Path.of(tmpDir).resolve(UUID.randomUUID()+"/" + PROBLEMATIC_CHAR));
workingDir = dir.getParent();
expectedFile = Files.createFile(dir.resolve("foo"));
}
public static void main(String[] args) throws IOException {
assert tmpDir != null;
prepare();
assert workingDir != null;
launch();
}
}
---------- END SOURCE ----------
FREQUENCY : always
Attachments
Issue Links
- duplicates
-
JDK-8210199 [linux / macOS] fileChooser can't handle emojis
- Resolved