Пуля — дура. Пых — молодец.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 03:46:00

Страниц: [1]
Печать
Автор Тема: Проблемы с кодировками(рэгекспы).  (Прочитано 200 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Rotten    ↓ 
12 Сентябрь, 2011, 02:50:49
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

Есть такая ситуация.
Как известно, Нетбинс(я не знаю, но по-моему и другие тоже) держит все исходники в юникоде по дефолту.
Все бы хорошо... Но вот если у меня входящий поток(InputStream) в текстовом представлении, закодированный, например в кириллицу(windows-1251)...
Как мне с ним работать, к примеру, посредством регескповых инструментов? Когда я в паттерне задаю русские символы, система посылает меня нахер ибо, видимо, видит в шаблоне крокозябры...
 
Есть класс Charset, при помощи которого можно задать явно кодировку (текстовым)данным и типа с ними дальше так работать... Я задавал, но...
При конвертации системная консоль возвращает знаки вопроса, регексповый парсер дальше посылает в лес..
 
Пробловал и по файлах как тут
http://xahlee.org/java-a-day/convert_charset.html
 
но все без толку...
 
Возможно проблема в том что в коде плохо распознаются кирилличные символы..
 

 

Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
Ivan    ↓ 
12 Сентябрь, 2011, 03:01:36 , спустя 10 минут 47 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 27
Сообщений: 1366
Сила слова: 1.98

iconv не пробовал?
 
ну или через костыли:
mb_internal_encoding('Windows-1251');
mb_ereg_match(...)
Спустя 50 секунд добавил
Ой разделом ошибся
Записан

Rotten    ↓ 
12 Сентябрь, 2011, 04:37:13 , спустя 1 час 35 минут 37 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

Я думаю что копать надо на уровне простого вывода кирилличных символов в системную консоль.
Странно, но у меня они выводятся знаками вопроса...
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
Nyaah    ↓ 
12 Сентябрь, 2011, 05:18:48 , спустя 41 минуту 35 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 34
Сообщений: 522
Сила слова: 6.51

Да не, как по ссылке в первом посте должно работать, наверно деёствительно все таки кирилица у тебя в консоль неверно выводится:
Java
public class JavaApplication31 {
    public static void main(String[] args) {
        try {
            File file = new File("/home/alexander/test_cp1251.txt");
            FileInputStream stream = new FileInputStream(file);
            InputStreamReader reader = new InputStreamReader(stream, "windows-1251");
            char[] buffer = new char[1024];
 
            reader.read(buffer, 0, 1024);
            stream.close();
 
            Pattern pattern = Pattern.compile("(тест\\d+)");
            Matcher matcher = pattern.matcher(new String(buffer));
            while (matcher.find()) {
                System.out.format("match:\"%s\" [%d:%d]%n", matcher.group(), matcher.start(), matcher.end());
            }
        }
        catch (UnsupportedEncodingException ex) {
            Logger.getLogger(JavaApplication31.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (FileNotFoundException ex) {
            Logger.getLogger(JavaApplication31.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (IOException ex) {
            Logger.getLogger(JavaApplication31.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
Для файла

тест1
тест2тест3
тест4
выдаёт:
match:"тест1" [2:7]
match:"тест2" [8:13]
match:"тест3" [13:18]
match:"тест4" [19:24]
Спустя 31 секунду добавил
попробуй вывести в файл результат, может в нём не будет вопросиков )
Записан

Work, buy, consume, die
Rotten    ↓ 
12 Сентябрь, 2011, 05:30:28 , спустя 11 минут 40 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

Nyaah, Спасибо... но проблема у меня в том что я немогу сконвертировать кириллицу в юникод...
К черту ту консоль - не с ней мне надо работать вообщемто(планируется gui написать)...
 
Text
File fo = new File("C:/VKOutput.html");
 
            InputStream is = null;
            try {
                is = method.getResponseBodyAsStream();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
 
            InputStreamReader isr = null;
 
            try {
                isr = new InputStreamReader(is, "windows-1251");//cp1251 пробовал тоже но без толку
            } catch (UnsupportedEncodingException ex) {
                ex.printStackTrace();
            }
 
            Writer w = null;
            try {
                w = new OutputStreamWriter(new FileOutputStream(fo),"UTF-8");
            } catch (UnsupportedEncodingException ex) {
               ex.printStackTrace();
            } catch (FileNotFoundException ex) {
               ex.printStackTrace();
            }
            int x;
 
            try {
                while ((x = isr.read()) != -1) {
                    w.write(x);
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            try {
                isr.close();
                is.close();
                w.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

Я открываю этот файл нетбинсом та как он подефолту и читает юникод (так как бы и читала програма на сколько я понимаю)... но в ответ получаю крокозябры и знаки вопросов...
Я ж ведь задаю явно кодировку кирилличную и вывожу поток в юникод...
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
phpdude    ↓ 
12 Сентябрь, 2011, 05:39:57 , спустя 9 минут 29 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20790
Сила слова: 1.66

а ларчик просто блядь открывается: открой в сп1251 и конвертни в ютф. а дальше регулярки. программисты блеядь
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Nyaah    ↓ 
12 Сентябрь, 2011, 05:59:20 , спустя 19 минут 23 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 34
Сообщений: 522
Сила слова: 6.51

хм, попробовал как у тебя по одному символу, получилась какая-то фигня, скопировал буффером, стало все окей:
Java
            File file = new File("/home/alexander/test_cp1251.txt");
            FileInputStream stream = new FileInputStream(file);
            InputStreamReader reader = new InputStreamReader(stream, "windows-1251");
            char[] buffer = new char[1024];
            int bufferLength = 0, x;
 
            OutputStreamWriter w = null;
            w = new OutputStreamWriter(new FileOutputStream("/home/alexander/test_utf8.txt"), "UTF-8");
 
            /*
            while ((x = stream.read()) != -1) {
                w.write(x);
            }*/

            do {
                bufferLength = reader.read(buffer, 0, 1024);
                w.write(buffer, 0, bufferLength);
            } while (bufferLength == 1024);
            stream.close();
            w.close();
Записан

Work, buy, consume, die
Rotten    ↓ 
12 Сентябрь, 2011, 07:49:40 , спустя 1 час 50 минут 20 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

Nyaah,  Спасибо... только вот правда у меня систем а начала распознавать переконверченные символы когда я считывал строками и явно добавил следующее:
Java

new String(line.getBytes(), "UTF-8");
 

А так просто с файла где переконверченный текст система понимать не хочет...
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
Страниц: [1]
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd, artoodetoo, Chuck Norris