Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Кодировка символов (код символа) - Программирование Android

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

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

Оговорюсь также - при использовании
Java
1
(int)'символ'
Все работает прекрасно, по таблице юникода всё правильно. Но мне для простоты нужна именно (char) форма.
Спасибо
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2016, 16:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кодировка символов (код символа) (Программирование Android):

Java Android Кодировка символов - Программирование Android
Здравствуйте. Какая кодировка у этих символов? И получится ли ее поменять для строки следующим образом, если нет, то почему и как это...

Сравнение символов через код символа - C++
есть задание выбрать неповторяющиеся символы и расположить в порядке убывания их кодов. с первым справится не проблема да и со вторым...

Дана строка символов. Заменить все вхождения символа '{' на 'begin' , а каждое вхождение символа '}' - на 'end' - Turbo Pascal
дана строка символов. Заменить все вхождения символа '{' на 'begin' , а каждое вхождение символа '}' - на 'end' блок-схему плиз!

Дана строка символов. Заменить все вхождения символа ‘{’ на ‘begin’, а каждое вхождение символа ‘}’ – на ‘end’ - Turbo Pascal
3. Дана строка символов. Заменить все вхождения символа ‘{’ на ‘begin’, а каждое вхождение символа ‘}’ – на ‘end’. Добавлено через 1...

Дано 2 символа. Верно ли, что код только одного символа кратен 3 - Turbo Pascal
помогите решить задачу: дано 2 символа. верно ли , что код только одного символа кратен 3 вот мое решение, исправьте, если есть...

Даны три символа. Верно ли, что код ни одного символа не является большой русской буквой - Turbo Pascal
даны три символа. верно ли, что код ни одного символа не является большой русской буквой

9
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
03.08.2016, 18:30 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Java
1
byte[] b = str.getBytes( "Cp1251" );
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
03.08.2016, 20:23 #3
Цитата Сообщение от opanasa Посмотреть сообщение
Символ 'в' - русская маленькая буква в и цифра 2 имеют одит и тот же код - 50.
Впервые такое слышу. Это в какой кодировке? Явное нарушение стандарта. Если ASCII, то там кириллица вынесена во вторую половину таблицы.
Вполне вероятно, что при получении символа вы отбрасываете один из двух байтов, что вообще неправильно.
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
04.08.2016, 08:28 #4
CoolMind, он так и пишет - берётся первый байт - у русских букв первый байт 50 что странно ибо в UTF-8 первый должен быть D0
0
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?
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
04.08.2016, 12:21 #6
opanasa, или так или так
Java
1
2
byte b = 123;
int i = b & 0xFF;
или через Byte.toUnsignedInt
0
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, как там выдаёт именно букву в. У меня же цель получить из отрицательных обратно.
Может как то можно указать кодировку? Спасибо
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
04.08.2016, 19:33 #8
opanasa, я думаю есть функции обратные той которые вы используете для получения байт из строки - ими вы и получите строку из байт, попробуйте пробить эту мысль
0
R0
17 / 17 / 9
Регистрация: 06.08.2015
Сообщений: 73
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);
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
05.08.2016, 12:56 #10
opanasa
Java
1
2
3
byte[] b;
...
String str = new String(b, "cp1251");
0
05.08.2016, 12:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2016, 12:56
Привет! Вот еще темы с ответами:

Кодировка символа - C++
Всем доброго времени суток!У меня возник вопрос при работе со строками,как символ перевести в дос-кодировку?строка без проблем при...

Замена одного символа другим и кодировка - Java SE
1. Пытаюсь в строке заменить символ "1" символом "|". Для этого делаю следующее: (data_02.words_from_text.get(i)).replaceAll("1",...

Код символа в число символа - C++
Подскажите плиз кто знает, каким способом можно присвоить переменной short bit = 0; значение символа под кодом (код в HEX) char symbol =...

определить, сколько символов ‘e’ предшествует первому вхождению символа ‘u’ ( либо сколько всего символов ‘e’ в этой последовательности) - C++
определить, сколько символов ‘e’ предшествует первому вхождению символа ‘u’ ( либо сколько всего символов ‘e’ в этой последовательности,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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