Eclipse OpenJ9,-XX:+CompactStrings 和路径名中的商标符号
Eclipse OpenJ9, -XX:+CompactStrings and Trademark symbol in Path name
我刚刚注意到 Eclipse OpenJ9 和 -XX:+CompactStrings
VM 标志存在一个奇怪的问题。我想知道这是一个错误还是我对某些事情的误解...?
情况如下:
收到来自DirectoryStream
的路径后,如果路径中有商标符号(™),该符号将被转换为另一个字符,引号(")。
只有在启用压缩字符串时才会发生这种情况。
我在 Windows 10.
上使用最新的 Eclipse OpenJ9 (v0.23.0)
HotSpot 显然默认启用了压缩字符串,但它没有同样的问题。
下面是演示该问题的示例代码:
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class TrademarkSymbol {
public static void main(String[] args) {
// First, create the file Test™.txt somewhere
Path path = Paths.get("C:\test\Test™.txt");
// This works (the file exists):
System.out.println(path + " exists? " + Files.exists(path, LinkOption.NOFOLLOW_LINKS));
// However, now try to get the path via DirectoryStream:
Path parent = path.getParent();
try {
DirectoryStream<Path> stream = Files.newDirectoryStream(parent);
stream.forEach(it -> {
// Here, the path no longer exists, because the trademark-symbol has been replaced with "-character.
System.out.println(it + " exists? " + Files.exists(it, LinkOption.NOFOLLOW_LINKS));
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
紧随其后,在 Eclipse OpenJ9 GitHub 存储库中创建了一个问题,该问题已在代码中修复。您可以在此处关注导致修复的整个对话:
我刚刚注意到 Eclipse OpenJ9 和 -XX:+CompactStrings
VM 标志存在一个奇怪的问题。我想知道这是一个错误还是我对某些事情的误解...?
情况如下:
收到来自DirectoryStream
的路径后,如果路径中有商标符号(™),该符号将被转换为另一个字符,引号(")。
只有在启用压缩字符串时才会发生这种情况。
我在 Windows 10.
上使用最新的 Eclipse OpenJ9 (v0.23.0)HotSpot 显然默认启用了压缩字符串,但它没有同样的问题。
下面是演示该问题的示例代码:
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class TrademarkSymbol {
public static void main(String[] args) {
// First, create the file Test™.txt somewhere
Path path = Paths.get("C:\test\Test™.txt");
// This works (the file exists):
System.out.println(path + " exists? " + Files.exists(path, LinkOption.NOFOLLOW_LINKS));
// However, now try to get the path via DirectoryStream:
Path parent = path.getParent();
try {
DirectoryStream<Path> stream = Files.newDirectoryStream(parent);
stream.forEach(it -> {
// Here, the path no longer exists, because the trademark-symbol has been replaced with "-character.
System.out.println(it + " exists? " + Files.exists(it, LinkOption.NOFOLLOW_LINKS));
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
紧随其后,在 Eclipse OpenJ9 GitHub 存储库中创建了一个问题,该问题已在代码中修复。您可以在此处关注导致修复的整个对话: