2017-10-13 23 views
0

Nous utilisons la fonction File.getName() dans l'objet de base de données Java java dans Oracle Database version 12. La propriété "file.encoding" est "WINDOWS-1251 ' Nous avons obtenu les bons noms de fichiers en 12.1 (Java 1.6) En 12.2 nous obtenons des caractères faux (Java 1.8) Le code est le même.encodage getName() dans la base de données Oracle 12.2 Embedded Java Machine

create or replace and compile java source named "JavaFileEncoding" as 

import java.io.*; 
import java.nio.charset.*; 

public class JavaFileEncoding { 
    public static String getCyrillicFileName() { 
    System.out.println("Default Charset=" + Charset.defaultCharset()); 
    File f = new File("<Directory containing files with non-ASCII characters"); 
    File[] list = f.listFiles(); 
    for(int 
     i = 0 
     ; i < list.length 
     ; i++ 
    ) { 
     if (!list[i].isDirectory()) { 
     return list[i].getName(); 
     } 
    } 
    return ""; 
    } 
} 
/

Quel est le codage exact du résultat File.getName()? Tout est-il passé de Java 6 à 8? Le codage des paramètres du serveur OS (Windows) est le même .. ou peut-être devrions-nous vérifier quelque chose d'autre? Impossible de trouver une mention dans la documentation Java.

Cordialement, Eugene.

+0

Afficher les sorties. 'File.getName()' renvoie un 'String', qui (en ce qui vous concerne) n'a pas d'encodage. – Kayaman

+0

12.2: GETCYRILLICFILENAME() ------------------------------------------- ------------------------------------- i? Eaao.txt 12.1: GETCYRILLICFILENAME() ------------------------------------------------- ------------------------------- привет.txt –

+0

Et quel est le charset par défaut? – Kayaman

Répondre

0

Oracle Support a reproduit le problème.

"impossible de lire les noms de fichiers cyrilliques à partir de la procédure stockée java RDBMS 12.2.0.1." Ils travaillent dessus