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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с кодировкой, Кодировка 
V
    Опции темы
Kizja
Дата 22.10.2007, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем!

Возникла проблема с кодировкой, надо считывать из файла текст, который потом будет обрабатываться, но текст из файла приходит не в качественной кодировке - т.е. в тексте встречаются буквы из эстонского языка - ну это такие же как и в немецком языке по сути -  и они отображаются неверно. Кодировкой должна быть UTF-8, на винде задавая её работает всё нормально, но если ОС линукс, то нет (во всяком случае у меня работало неправильно - пробовал на двух компах, где стоял линукс) - так вот, а на линуксе всё нормально работает с ISO-8859-15, но эта кодировка не удовлетвоят условию поставленной задачи. Т.е. надо чтобы и на виндоусе и на линуксе работало бы с UTF-8, может кто-то встречался с такой проблемой или знает как её решить? Для теста пробовал считать из файла и потом записать в другой:

Код

    public static void main(String[] args) throws Exception {
        
        String string = getFileData("input.txt");

        PrintWriter pw = new PrintWriter(new OutputStreamWriter(
                new FileOutputStream("output.txt", true), "UTF-8"));
        pw.println(string);
        pw.flush();
        pw.close();
    }
    
    private static String getFileData(String filename) {
        BufferedReader in;
        String data = "";
        try {
            in = new BufferedReader(new InputStreamReader(new FileInputStream(
                    filename), /*"ISO-8859-15"*/"UTF-8"));
            StringBuffer wordList = new StringBuffer();
            while (in.ready()) {
                wordList.append(in.readLine());
                wordList.append("\n");
            }
            data = wordList.toString();
        } catch (Exception e) {
         
        }
        return data;
    }

PM MAIL   Вверх
LSD
Дата 22.10.2007, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Не понял в чем проблема. Если ты при чтении и записи указал, что кодировка 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   Вверх
Trogvar
Дата 16.11.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет!
Сорри, если это оффтоп!
Есть проблема:
При заполнении формы, если длина дескрипшена больше 2000 символов, то то дескрипшен обрезается до 2000 символов, а полный текст кидается в HTML файл. 
Только вот проблема в том что при открытии этого HTML файла русский текст не распознается, с английским все нормально.
перед текстом дескрипшена стоит:
 <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /></head>
выбрана кодировка UTF-8, так как в такой кодировке приходит с JSP формы строка.
PM MAIL   Вверх
Trogvar
Дата 16.11.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Прошу прощения!
Ответ бул в постах по теме уже нашел.
Вопрос снимается.
P.S.:Еще раз сорри!!!
PM MAIL   Вверх
_Dancer_
Дата 8.2.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня немного другая задача, но проблема такая же!!!
В винде все намано перегоняет в utf8, а в линуксе не хочет, уже который день бюсь- ничего не выходит:( Подозреваю этоиз-за того что у линукса кодировка по умолчанию utf8, но точно сказать не могу
Использовала класс java.nio.charset.Charset...
Хелп ми, кто-нибудь..
Может есть какие-то тонкости?

PM MAIL   Вверх
LSD
Дата 8.2.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



_Dancer_, код в студию.


--------------------
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   Вверх
_Dancer_
Дата 8.2.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ага, значит так.. попробую описать..
Есть методы кодировки в UTF-8  и декодировки
Код

UTFCharset = Charset.forName("UTF-8");
 
Код

public String EncodeToUtf8(String source)
    {
        
        ByteBuffer buf = UTFCharset.encode(source);        
        byte[] msgBytes = new byte[buf.limit()];
        System.arraycopy(buf.array(), 0, msgBytes, 0,  buf.limit());
        String str = new String(msgBytes);        
        return str.trim();
    }    
 
Код

public String DencodeFromUtf8(String source)
    {
        String str =  new String((UTFCharset.decode(ByteBuffer.wrap(source.getBytes()))).array());
        return str.trim();
    }
 
Так,вот в винде работает, в линуксе нет.Прада есть еще следующее..
Я пишу жаббер клиента, По сети приходит xml, Я ситаю побайтобо в массив byte[] buff , потом из эого массива создаю строку new String(buff).
Но прием-то нармально проходит..
А при отправке я кодирую строку своей ф-цией  myStr=EncodeToUtf8(msg), после этого  отправляю по сети ,байты  outstr.write(myStr.getBytes(),0,myStr.length());
Ну вот в итоге получается что отправляю я не в Utf, так как при русских буквах  сервер сообщает о неверном xml.

Вот в принципе немного сумбурно, но основная суть...
PM MAIL   Вверх
LSD
Дата 8.2.2008, 17:55 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Брр какая жуть и ересь....

Значит так:
1. Строки в Java всегда находятся в кодировке UTF-16, и никаких преобразований кодировки для строк нет. Преобразовывать можно только String->byte[] и byte[]->String. Поэтому методы String EncodeToUtf8(String) и String DencodeFromUtf8(String) неверны в принципе.
2. Использовать Charset.encode() стоит лишь в крайних случаях (когда оптимизируем производительность и т.п.). У тебя же они совсем не к месту.

Самое простой способ преобразование это:
Код

byte[] bytes = "text".getBytes(charset);
String text = new String(bytes, charset);


Если ты работаешь с сокетами через InputStream/OutputStream, то можешь создать Writer/Reader и сразу писать туда текст:
Код

Writer writer = new OutputStreamWriter(socketOutputStream);
writer.write("text");

Плюс ко всему XML парсер умеет работать с бинарными потоками, и можно сразу работать с socketOutputStream.


--------------------
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   Вверх
_Dancer_
Дата 11.2.2008, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо! Пробовала изначально 
byte[] bytes = "text".getBytes(charset);
String text = new String(bytes, charset);
не работало.. вот только сейчас все внимательно глянула и нашла ошибку %)
 Ошибка была в записи в стрим.
PM MAIL   Вверх
Anatret
Дата 29.5.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Нужна Ваша помошь Есть JPS стриница с кодировкой KOI8-R
 
Код

<%@ page contentType="text/html; charset=koi8-r" %>

эта страница передает в java.class переменные со значениями, который в свою очередь обрабатывает и передает в базу.

передаю вот как

Код

ContractActions contract= new ContractActions();
 String res = contract.personcontract(dname,dcomment,tariff,.....));


Так вот класс получает значения, этих переменных, если на кирилице, повросиками (????).

понять в чем дело не могу помогите плиз.

PM MAIL   Вверх
Zlatogorov
Дата 29.5.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 18.12.2007
Где: BW,Stuttgart

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



Почти тажа проблема, только хуже.
На входе может быть UTF8, UTF8 without BOM, и прочие кодировки.
Различие между "классическим" UTF8 и прочими можно найти, а вот между UTF8 without BOM и остальными - нет.
Каким образом можно определить в какой кодировке идёт файл?

Добавлено через 5 минут и 27 секунд
Kizja
единственно что приходит на ум в Вашем случае, так это использовать native2ascii с ключём -reverse перд прочтением файла.
PM MAIL ICQ   Вверх
LSD
Дата 29.5.2008, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Брр... Вы че решили все проблемы с кодировками постить в одном топике?

Anatret, я так понял, у тебя проблема со Struts? Если да, то посмотри эту тему, если не поможет создай новую в разделе J2EE.


Цитата(Zlatogorov @  29.5.2008,  16:21 Найти цитируемый пост)
Различие между "классическим" UTF8 и прочими можно найти, а вот между UTF8 without BOM и остальными - нет.

Byte Order Mark (BOM) FAQ
Если кратко, то BOM это сигнатура которая идет вначале и обозначает, в какой кодировке стоит ожидать данные.


Цитата(Zlatogorov @  29.5.2008,  16:21 Найти цитируемый пост)
Каким образом можно определить в какой кодировке идёт файл?

Гарантированного способа нет. Если ты знаешь на каком языке будет текст, то можно попробовать частотный анализ или еще, что подобное.


--------------------
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   Вверх
Zlatogorov
Дата 29.5.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 18.12.2007
Где: BW,Stuttgart

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



LSD
спасибо , я знаю что такое ВОМ, вопрос как отличить файл в кодировке UTF8 without BOM от файлов в другой кодировке.
Дело в том, что не извено на каком языке будет документ и в какком редакторе его создают.
Например UltraEdit портит UTF файлы.

Это сообщение отредактировал(а) Zlatogorov - 29.5.2008, 20:07
PM MAIL ICQ   Вверх
Anatret
Дата 30.5.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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