2015-08-20 3 views
-1

Avec mon programme, un utilisateur peut taper un texte dans un champ JText. Le texte sera sauvegardé dans une chaîne (dans le code ci-dessous "strLine1") et devrait être converti en nombres décimaux.Convertir la chaîne en ASCII décimal étendu

Donc, j'utilise getBytes.

bytearray1 = strLine1.getBytes(); 

Ceci est mon code pour la sortie:

for (int i=0; i<bytearray1.length; i++) { 
        builder1.append(bytearray1[i]); 
        if(i != bytearray1.length) 
         builder1.append("• "); 
} 

Cela fonctionne bien, mais quand je tape dans certains charakters spéciaux comme « ß » ou « ò » je reçois des sorties comme « -33 » ou "-dix". Je lis beaucoup sur mais je n'ai pas devancé.

Le résultat pour "ß" doit être 225 et "ö" 148 comme sur cette page: http://www.theasciicode.com.ar/american-standard-code-information-interchange/ascii-codes-table.png

Les personnages y sont répertoriés comme "ASCII étendu".

J'ai également essayé plusieurs jeux de caractères mais je n'ai pas trouvé le bon résultat.

Aidez-nous s'il vous plaît. Merci.

+0

Figure dehors [qui] (https://en.wikipedia.org/wiki/Character_encoding#Common_character_encodings) l'encodage c'est et puis voir si votre Java [soutient] (http://www.herongyang.com/Unicode/ Java-charset-Supported-Character-Encodings-dans-JDK.html). –

+0

Sa page de codes 858 (https://en.wikipedia.org/wiki/Code_page_858) (points de code 0-127) est la même que ASCII. Mais je ne sais pas exactement comment l'utiliser maintenant avec toCharArray(). – user3716178

Répondre

1

donc j'ai obtenu une solution qui a bien fonctionné pour moi:

je l'ai changé pour revenir getBytes à ce qui suit:

try {             
       bytearray1 = strLine1.getBytes("CP858"); 
    }   catch (UnsupportedEncodingException e1) { 
       e1.printStackTrace(); 
} 

Ici j'utilise la page de code correct (858).

Et voici ma sortie:

for (int i=0; i<bytearray1.length; i++) {    
        builder1.append((int)bytearray1[i] &0xff);  
        if(i != bytearray1.length) 
         builder1.append("• "); 
       } 
      } 

Ainsi, le "& 0xff" il convertit de signé non signé.

1

Utilisez toCharArray() au lieu de getBytes().

Je vais laisser le reste de l'apprentissage du pourquoi à vous.

0

Ok, l'octet ne peut pas enregistrer des nombres plus élevés que 127. N'a pas mentionné cela. Donc, je l'ai changé:

chararray1 = strLine1.toCharArray(); 

et la sortie avec mon stringbuilder à:

builder1.append((int)chararray1[i]); 

Mais la « ß » est de 223 au lieu de 225. D'autres personnages sont mal aussi.