2015-08-20 7 views
-1

С моей программой пользователь может ввести текст в поле JText. Текст будет сохранен в строке (в коде ниже «strLine1») и должен быть преобразован в десятичные числа.Преобразование строки в расширенный ASCII Десятичный

Для этого я использую getBytes.

bytearray1 = strLine1.getBytes(); 

Это мой код для вывода:

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

Это работает хорошо, но когда я типа в некоторых специальных charakters как «ß» или «O» я получить выходы, как «-33» или "-10". Я много читал, но не продвинулся вперед.

Результат для «ß» должно быть 225 и «ö» 148, как на этой странице: http://www.theasciicode.com.ar/american-standard-code-information-interchange/ascii-codes-table.png

Символы перечислены там «расширенного ASCII».

Я также пробовал несколько кодировок, но не достиг нужного результата.

Пожалуйста, помогите. Благодарю.

+0

Выделите [which] (https://en.wikipedia.org/wiki/Character_encoding#Common_character_encodings) кодировку, которая есть, а затем посмотрите, поддерживает ли ваша Java [поддержка] (http://www.herongyang.com/Unicode/ Java-charset-Supported-Character-Encodings-in-JDK.html). –

+0

Это Codepage 858 (https://en.wikipedia.org/wiki/Code_page_858) (коды 0-127) - это то же самое, что и ASCII. Но я точно не знаю, как это использовать теперь с помощью метода toCharArray(). – user3716178

ответ

1

Так я получил решение, которое работало хорошо для меня:

Я изменил его обратно в GetBytes на следующее:

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

Здесь я использую правильную кодировку (858).

А вот мой выход:

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

Таким образом, "& 0xff" преобразует его из подписаны без знака.

1

Использовать toCharArray() вместо getBytes().

Я оставлю оставшуюся часть знаний о том, почему до вас.

0

Хорошо, байт не может сэкономить более высокие цифры, чем 127. Не упоминал об этом. Таким образом, я изменил его:

chararray1 = strLine1.toCharArray(); 

и выход с моим StringBuilder в:

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

Но «ß» является 223 вместо 225. Другие персонажи тоже неправильно.

Смежные вопросы