Mam do czynienia z kodem, który wykonuje różne operacje IO z plikami, i chcę, aby był w stanie radzić sobie z międzynarodowymi nazwami plików. Pracuję na komputerze Mac z Javą 1.5, a jeśli nazwa pliku zawiera znaki Unicode, które wymagają surogatów, JVM nie może zlokalizować pliku. Na przykład, mój plik testowy jest:Java nie może otworzyć pliku z surogatycznymi wartościami Unicode w nazwie pliku?
"草鷗外.gif"
który zostanie podzielony na znaki Java \u8349\uD85B\uDFF6\u9DD7\u5916.gif
Jeśli utworzyć plik z tego pliku, nie mogę go otworzyć, ponieważ otrzymuję wyjątek FileNotFound. Nawet przy tym na folder zawierający plik zawiedzie:
File[] files = folder.listFiles();
for (File file : files) {
if (!file.exists()) {
System.out.println("Failed to find File"); //Fails on the surrogate filename
}
}
Większość kodu Jestem rzeczywiście do czynienia z są postaci:
FileInputStream instream = new FileInputStream(new File("草鷗外.gif"));
// operations follow
Czy jest jakiś sposób mogę rozwiązać ten problem, czy inaczej unikniesz nazw plików lub otwierania plików?
Jaka jest wartość zestawu Charset.defaultCharset() w twoim środowisku? –
(Niestety, StackOverflow ma również problem z surogatami i usunęło ideogram U + 26FF6 z pytania) – bobince
Czy możesz podać, co zwraca System.getProperty ("file.encoding")? Spróbuj zmienić kodowanie java-pdfile.encoding = ENCODING_GOES_HERE, jeśli to nie działa, zmień ustawienia regionalne systemu. Jeśli to też nie zadziała, poczekamy, aż ekspert go rozwiąże. – JCasso