Come trovare il nome charset in base ai codici byte?

-1

Ho una stampante e un SDK con cui lavorare in Java. La stampante funziona bene con lettere e cifre in inglese ma non stampa correttamente simboli speciali come "ä" o "ê".

Suppongo di dover convertire una stringa in charset usata dalla stampante. Ma non so quale sia il set di caratteri e non ha possibilità di ottenerlo ora.

Eseguo la stampa di prova con questo semplice codice:

for (int i = 0; i < 256; i++) {
     byte[] a = new byte[1];
     a[0] = (byte) i;
     printer.print((i+" ").getBytes());
     printer.print(a);
     printer.newLine();
}

E ora so che "ä" ha il codice 132 e "ê" ha il codice 136.

Come trovare il nome charset, quando so quale codice corrisponde al simbolo?

    
posta BArtWell 18.12.2016 - 13:06
fonte

2 risposte

0

Innanzitutto ricevo tutti i set di caratteri e i set di filtri supportati da uno dei simboli che la stampante stampa correttamente (inglese 'A' con codice 65):

SortedMap<String, Charset> charsets = Charset.availableCharsets();
for (SortedMap.Entry<String, Charset> entry : charsets.entrySet()) {
    try {
        String symbol = "A";
        byte[] bytes = symbol.getBytes(entry.getKey());
        if (((int) bytes[0]) == 65) {
            print(entry.getKey());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Ricevo una short list con set di caratteri appropriati. Quindi lo filtro per i simboli dei problemi e trova il set di caratteri necessario.

    
risposta data 18.12.2016 - 15:36
fonte
1

I personaggi sono una delle cose più confuse in informatica. Questo e il motivo per cui l'informatica era in gran parte a partire dai paesi di lingua inglese che hanno adottato l'ASCII (codice standard americano per lo scambio di informazioni) sono responsabili della miserabile esistenza di personaggi che devono vivere in un computer. I cinesi e gli emoji non erano in discussione quella volta. Quindi anche se Byte == Letter è ancora preso e trattato come tale dalla maggior parte dei linguaggi di programmazione e dei programmatori, in realtà sono due concetti diversi. Apple ha introdotto il concetto di glifi nelle sue API da molto tempo, ma le persone sono ancora pigre. E questo certamente non cambierà nel prossimo futuro. Unicode ha cercato di porre rimedio alla mancanza di varietà nei glifi che è possibile rappresentare in una "stringa di caratteri". Così hanno inventato il personaggio multi-byte e aperto una lattina di worm. Invece di semplificare le cose, la situazione peggiorò. Le persone e i linguaggi di programmazione mescolano tutto e tutti quelli che hanno mai avuto a che fare con la conversione del codice iniziano a piagnucolare insieme a tutte quelle povere creature.

Come hai potuto scoprire la codifica se non lo sai? Bene, fai un'analisi statistica del testo. Decidi se hai Unicode o no. In caso contrario, fai una buona ipotesi su quale lingua sia il testo originale (come potresti farlo). Quindi correggilo con quella tabella codici.

TL; DR Non puoi. Devi essere fornito con le giuste informazioni.

    
risposta data 18.12.2016 - 13:57
fonte

Leggi altre domande sui tag