| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java ME (J2ME) > Проблема с выводом русского текста |
| Автор: Mind_master 12.1.2009, 20:23 | ||||
| В программе я беру введенный в поле ввода текст, перевожу его в byte массив, после чего прибавляю/отбавляю байты. После чего делаю
Английский язык выводит правильно, а вместо русского только знаки вопроса (пробовал на нокии с40 и какомто сони ериксоне Строка
В чем может быть проблема? |
| Автор: math64 13.1.2009, 09:37 | ||
|
| Автор: eugine_s 13.1.2009, 12:51 |
| math64, я не думаю что такой код требуется, так как: т.е. строка уже в utf и преобразовывать ее не нужно из 1251 в utf Я вижу 2 варианта проблемы: 1) как уже описывал выше - возможно проблема в преобразовании. Что там делается с байтами? 2) так же возможно еще одна проблема: как выводится текст на экран. если используется свой шрифт, то возможно там какие-то проблемы, но вероятнее всего п1. |
| Автор: Mind_master 13.1.2009, 16:19 |
| да, как я понял, проблема именно в преобразовании таким образом вопрос: как прибавлять/отнимать байты (чтобы получилась следующая/предыдущая буква, символ) у символов UTF ? З.Ы. знаки вопроса выводятся если ничего не делать с массивом (т.е. byte для хранения не подходит) |
| Автор: W0LF 13.1.2009, 17:04 | ||
с "Ё" не получится. В j2me System.arraycopy нет Быстро, но через заднее место |
| Автор: Mind_master 13.1.2009, 19:08 |
| Всем спасибо, разобрался |
| Автор: John2 12.5.2010, 00:01 | ||
У меня аналогичная проблема. Ситуация с массивами byte, хранящимися в RMS. При преобразовании из byte[] в String, в эмуляторе выводятся правильно русские буквы.
А в телефоне Nokia выводятся знаки вопроса - "?????". В чём может быть проблема - с кодировками? |
| Автор: ivanovpv 12.5.2010, 07:43 | ||||
| Ну вы даете... Рассказываю правильный способ работы с байтами строк в J2ME: 1) Правильно переводим String в массив байтов
байты получаются из стринга все время разные в зависимости от кодировки. Если не указывать кодировку, то будет взята кодировка по умолчанию, которая зависит от положения луны на небосклоне (проще говоря в зависит от локали и модели тилипона) - посему настоятельно рекомендуется вручную указывать кодировку. Рекомендуется или ISO-8859-1 или UTF-8 - поскольку они поддерживаются всегда. 2) Чегой-то делаем с байтами. Кстати, вынужден опровергнуть уважаемого W0LF, System.arraycopy() в J2ME есть! 3) Массив байтов переводим обратно в String тем же макаром, ну или более затейливо, а именно с оффсетом в массиве:
|
| Автор: W0LF 12.5.2010, 18:02 | ||
ну, след раз апи смотреть буду, прежде чем писать =) я уже три года под j2me не пишу, да и вообще под java =) |
| Автор: John2 12.5.2010, 18:47 |
| Спасибо, с UTF-8 получилось, а с ISO-8859-1 нет. Но здесь другая проблема - никак не дойдёт. При извлечении из rms String получается вдвое короче, чем начальная. Поиски информации по конструкторам и методам классов String и Byte успехом не увенчались. Пожалуйста помогите разобраться Что Вы здесь имели ввиду - обычная процедура для сохранения данных или как раз какая-то особая обработка массивов байт? |
| Автор: ivanovpv 13.5.2010, 08:45 | ||
По хорошему надо делать так:
Добавлено через 3 минуты и 36 секунд Бывает, а я уже лет 10 не пишу по Сями - так что уже и забыл правила форматирования printf() |
| Автор: John2 18.5.2010, 17:22 | ||
Спасибо! Что называется - просто недосмотрел. Сейчас всё работает. |