Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
opanasa
0 / 0 / 0
Регистрация: 12.12.2015
Сообщений: 15
#1

Кодировка символов (код символа) - Android

03.08.2016, 16:26. Просмотров 363. Ответов 9
Метки нет (Все метки)

Здравствуйте господа. Такой вопрос. При получении кода символа при помощи
Java
1
(char)'символ'
столкнулся с проблемой. Символ 'в' - русская маленькая буква в и цифра 2 имеют одит и тот же код - 50. Соответственно так же со всеми - а=0=48...и т.п. То есть цифра в кодировке ascii и utf-8 имеет правильный код. С латинскими символами так же все впорядке. С кириллицей - печаль. Подскажите в чем соль.

Оговорюсь также - при использовании
Java
1
(int)'символ'
Все работает прекрасно, по таблице юникода всё правильно. Но мне для простоты нужна именно (char) форма.
Спасибо
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
03.08.2016, 18:30     Кодировка символов (код символа) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Java
1
byte[] b = str.getBytes( "Cp1251" );
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
03.08.2016, 20:23     Кодировка символов (код символа) #3
Цитата Сообщение от opanasa Посмотреть сообщение
Символ 'в' - русская маленькая буква в и цифра 2 имеют одит и тот же код - 50.
Впервые такое слышу. Это в какой кодировке? Явное нарушение стандарта. Если ASCII, то там кириллица вынесена во вторую половину таблицы.
Вполне вероятно, что при получении символа вы отбрасываете один из двух байтов, что вообще неправильно.
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
04.08.2016, 08:28     Кодировка символов (код символа) #4
CoolMind, он так и пишет - берётся первый байт - у русских букв первый байт 50 что странно ибо в UTF-8 первый должен быть D0
opanasa
0 / 0 / 0
Регистрация: 12.12.2015
Сообщений: 15
04.08.2016, 12:00  [ТС]     Кодировка символов (код символа) #5
Java
1
      byte[] b = str.getBytes( "Cp1251" );
Символ русской буквы в выдает код "-30". Собственно ведь правильно. Byte от -128 до 127 вроде. А вот сам номер (226) получать вычитанием 256 - 30?
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
04.08.2016, 12:21     Кодировка символов (код символа) #6
opanasa, или так или так
Java
1
2
byte b = 123;
int i = b & 0xFF;
или через Byte.toUnsignedInt
opanasa
0 / 0 / 0
Регистрация: 12.12.2015
Сообщений: 15
04.08.2016, 18:31  [ТС]     Кодировка символов (код символа) #7
Спасибо за помощь. Получать - получаю номера. -30 символ в. Складываю -30 и 256 и 226 искомый номер. Хорошо.
Но не подскажете как из минусового номера получить обратно символ.
Java
1
2
byte str = -30;
System.out.println ((char)str);
Даёт странные символы. Видимо из кодировки unicode. При задании номера 1074, как там выдаёт именно букву в. У меня же цель получить из отрицательных обратно.
Может как то можно указать кодировку? Спасибо
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
04.08.2016, 19:33     Кодировка символов (код символа) #8
opanasa, я думаю есть функции обратные той которые вы используете для получения байт из строки - ими вы и получите строку из байт, попробуйте пробить эту мысль
R0
17 / 17 / 9
Регистрация: 06.08.2015
Сообщений: 72
05.08.2016, 10:27     Кодировка символов (код символа) #9
Цитата Сообщение от opanasa Посмотреть сообщение
Может как то можно указать кодировку?
Русские символы расположены в ASCII таблице после 128 знака, поэтому для
Java
1
byte
java они будут всегда отрицательными, в СИ можно использовать
C
1
unsigned char
, а вам проще писать
Java
1
char
- в java он 16 бит
Java
1
2
3
4
        byte str = -30;
        char symb = (char)str;
        symb &= 0x00ff;
        System.out.println (symb);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2016, 12:56     Кодировка символов (код символа)
Еще ссылки по теме:

Android Java Android Кодировка символов
Android Вывод символа Юникода по его коду в TextView
Android Парсинг сайта и кодировка
EditText Замена символа при вводе Android
Android Как отлавливать ввод каждого символа

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vxg
Модератор
3021 / 1823 / 189
Регистрация: 13.01.2012
Сообщений: 6,910
05.08.2016, 12:56     Кодировка символов (код символа) #10
opanasa
Java
1
2
3
byte[] b;
...
String str = new String(b, "cp1251");
Yandex
Объявления
05.08.2016, 12:56     Кодировка символов (код символа)
Ответ Создать тему
Опции темы

Текущее время: 05:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru