Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка, объясните как с ней работать 
:(
    Опции темы
rni
  Дата 12.10.2004, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 10.3.2004

Репутация: 1
Всего: 3



Клиент с сервером общаются через порт.
Серверная программа на Unix Solaris.
Клиент - винды. Попытался писать русский текст, выдало козявок,
неверно выводит и такой код (перекодировано с помощью native2ascii)
Код
out.println(new String(serObj.msgNLS(
           "\u0455\u0433\u0430\u0425\u043b\u042e\u042f \u0433\u042f\u0428\u0432\u0421\u042e\u0425\u042e\u042f!"
           , "Succesfully saved!")));

ещё пробовал
String res = new String( src.getBytes("ISO-8859-1"), "Cp1251" );
- выводит знаки вопроса.

Что интересно native2ascii даёт разные результаты в разных ОС а В виндах есть разница даже при вводе из файла и с клавиатуры.

В общем-то действовал наугад, а как правильно и хорошо сделать - не знаю...


qstn.gif
--------------------
r-xr-xr-x 3 мусорных ведра корня 14312 9 января 2000 perl
PM MAIL ICQ   Вверх
Nobody
Дата 12.10.2004, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: 4
Всего: 16



Читаем документацию по
InputStreamReader
и
OutputStreamWriter


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
LSD
Дата 12.10.2004, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Внутри class файлов все строки храняться в UTF-8. При компиляции нужно указать -encoding<кодировка_файла>.
Цитата
Стандарт ISO 8859 включает в себя несколько 8-битных расширений для набора символов ASCII (также известного как ISO 646-IRV). Самым необходимым является ISO 8859-1, "Latin Alphabet No. 1", который широко распространен и может рассматриваться как замена стандарта ASCII. ISO 8859-1 поддерживает следующие языки: африкаанс, баскский, каталонский, датский, голландский, английский, фарерский, финский, французский, галицийский, немецкий, исландский, ирландский, итальянский, норвежский, португальский, шотландский, испанский и шведский. Символы ISO 8859-1 являются первыми 256-ю символами стандарта ISO 10646 (Unicode).

Соответсвенно русский не поддерживается. Так что лучше писать:
Код
String res = new String( src.getBytes("UTF-8"), "UTF-8" );



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Nobody
Дата 13.10.2004, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: 4
Всего: 16



Цитата(LSD @ 12.10.2004, 22:01)
Внутри class файлов все строки храняться в UTF-8.
...
Соответсвенно русский не поддерживается.

А что, кирилица уже не входит в Unicode?


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
LSD
Дата 13.10.2004, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Nobody @ 13.10.2004, 21:36)
А что, кирилица уже не входит в Unicode?

Это относилось не к UTF-8, а к ISO 8859-1.
Добавлено @ 21:49
При конвертации в ISO 8859-1, русские символы просто терялись, т.к. они не поддерживаются данной кодировкой.
Да и сам код конвертации выглядит странно. Вначале получаем строку в ISO 8859-1, а затем пытаемся ее прочитать, так как будто она в Cp1251.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Nobody
Дата 13.10.2004, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: 4
Всего: 16



Код
public class xxx {
   public static void main(String[] args) {
       System.out.println("Судя по тому, что мне говорят, этот код не должен работать.");
   }
}


Файл создаём в любом Юникод-редакторе.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
ElectricalStorm
Дата 14.10.2004, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: 5
Всего: 9



как то так я делал
там и win1251 можно написать
Код

private static Charset charset = Charset.forName("ISO-8859-15");
private static CharsetDecoder decoder = charset.newDecoder();

.........
........
int sz = (int)fc.size();
MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);
CharBuffer cb = decoder.decode(bb);






--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
rni
Дата 14.10.2004, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 10.3.2004

Репутация: 1
Всего: 3



Цитата(Nobody @ 14.10.2004, 00:24)
од 
public class xxx {
    public static void main(String[] args) {
        System.out.println("Судя по тому, что мне говорят, этот код не должен работать.");
    }
}


Файл создаём в любом Юникод-редакторе.


--------------------

Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК

System.out работает на ура. А вот передача через сокет именно с юниксовой машины не получается.
Компилирую в кодировке 1251
ElectricalStorm
fc - FileChannel? У SocketChannel я не нашёл метод map.

Мне кажется, разгадка где-то близко... notify.gif

Это сообщение отредактировал(а) rni - 14.10.2004, 11:21
--------------------
r-xr-xr-x 3 мусорных ведра корня 14312 9 января 2000 perl
PM MAIL ICQ   Вверх
Nobody
Дата 15.10.2004, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: 4
Всего: 16



Цитата
Компилирую в кодировке 1251


Вот эта фраза мне не ясна. Создай OutputStreamWriter с нужной кодировкой и усё.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
rni
Дата 15.10.2004, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 10.3.2004

Репутация: 1
Всего: 3



biggrin.gif
Спасибо!!!
Код

new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "Cp1251")), true)

--------------------
r-xr-xr-x 3 мусорных ведра корня 14312 9 января 2000 perl
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.