7
votes

Comment rediriger toute la sortie de la console sur une balançoire JTextarea / JTextpane avec le bon codage?

J'ai essayé de rediriger System.out PrintStream à un JTextpane. Cela fonctionne bien, à l'exception du codage des caractères locaux spéciaux. J'ai trouvé beaucoup de documentation à ce sujet (voir pour ex. Page de codage MindProd ), mais je ' m toujours en train de se battre avec ça. Des questions similaires ont été postées dans Stackoverflow, mais le codage n'a pas été abordé aussi loin que j'ai vu.

première solution: xxx p> second solution doit utiliser java.nio . Je ne comprends pas comment utiliser le Charset. xxx

aucune solution ne fonctionne. Aucune idée?

Merci d'avance, jgran


2 commentaires

Question de sujet: pourquoi les deux utilisateurs - Jgran (OP) et Jgran (Répontateur: Stackoverflow.com/questions/1522444/... ) ?


Mon erreur ... devrait avoir la FAQ plus au sérieux. Donc le même utilisateur!


4 Réponses :


0
votes

La chaîne en Java ne dispose pas d'une chaîne de codage ne sont soutenues par une matrice de caractères et le caractère doit toujours être utf-16 pendant qu'ils sont traités comme des chaînes et des valeurs de caractère.

Le codage ne se met en question que lorsque vous exportez ou d'importer des chaînes / des caractères vers ou depuis une représentation externe (ou un emplacement). Le transfert doit avoir lieu en utilisant une séquence d'octets pour représenter la chaîne. P>

Je pense que la première solution est proche, mais aussi totalement confus. Tout d'abord, vous demandez à Java de traduire les valeurs de caractère à leurs valeurs équivalentes codées par CP1252 (le «mot» pour le caractère en forme de similaire dans la "langue" CP1252). Ensuite, vous créez une chaîne de cette séquence d'octets, indiquant que cette séquence de codes CP-1252 est en fait une séquence de codes UTF-8 et doit être traduite dans la représentation en mémoire standard (UTF-16) de UTF-8. P>

Une chaîne n'est jamais UTF og CP1252 ou quelque chose comme ça - c'est des caractères d'Alsways. Seules les séquences d'octets sont UTF-8 ou CP1252. Si vous souhaitez traduire des valeurs de caractère en une chaîne UTF-8, vous pouvez utiliser. P>

byte[] utfs = myString.getBytes("UTF-8");


0 commentaires

1
votes

Vous devez créer l'imprimante avec le bon encode: http://www.j2ee.me/j2se/1.5.0/docs/ajava/java/io/printStream.html#printStream (java.io.file , java.lang.string)

Pourriez-vous fournir plus de code sur ce que vous essayez de faire?


0 commentaires

0
votes

Lorsque vous supposez légitimement que le problème est probablement dans:

String s = Character.toString((char)i);


0 commentaires

5
votes

Essayez ce code:

public class MyOutputStream extends OutputStream {

private PipedOutputStream out = new PipedOutputStream();
private Reader reader;

public MyOutputStream() throws IOException {
    PipedInputStream in = new PipedInputStream(out);
    reader = new InputStreamReader(in, "UTF-8");
}

public void write(int i) throws IOException {
    out.write(i);
}

public void write(byte[] bytes, int i, int i1) throws IOException {
    out.write(bytes, i, i1);
}

public void flush() throws IOException {
    if (reader.ready()) {
        char[] chars = new char[1024];
        int n = reader.read(chars);

        // this is your text
        String txt = new String(chars, 0, n);

        // write to System.err in this example
        System.err.print(txt);
    }
}

public static void main(String[] args) throws IOException {

    PrintStream out = new PrintStream(new MyOutputStream(), true, "UTF-8");

    System.setOut(out);

    System.out.println("café résumé voilà");

}

}


3 commentaires

Merci beaucoup pour votre solution qui pourrait être rapidement adaptée à mon propre problème. Salutations.


Est-ce que écriture () appelle automatiquement flush () ?


@ CHX101, écrire () n'appelle pas de flush () mais PrintStream fait pour chaque nouvelle ligne. Veuillez noter que la mise en oeuvre du rinçage () dans l'exemple ci-dessus utilise un tampon de charme de 1024 - qui ne convient pas à la consommation de produit.