Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 11.10.2010
Сообщений: 22

Автоопределение кодировки

10.11.2010, 15:11. Показов 2268. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть вот такая программа:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.StringTokenizer;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
//import ;
 
 
public class VisualConsoleMain {
    /**
     * @param args
     * объявляем то, что понадобится вызывать из любой точки программы
     */
        static JTextArea JTextArea1 = new JTextArea(20,50);
        
    
    public static void main(String[] args) {
        
        (new Thread (new GuiCreator())).start();
 
        System.out.println("the main block is completed");
        
    }
    static class GuiCreator implements Runnable{
        public void run(){
            JFrame.setDefaultLookAndFeelDecorated(false);
            JFrame frame = new JFrame("Visual Console for Windows");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            JLabel label = new JLabel("This is the text label");
            final JScrollPane JScrollPane1 = new JScrollPane(JTextArea1);
 
            JScrollPane1.setViewportView(JTextArea1);
            
            JTextArea1.addKeyListener(new KeyListener() {
 
                @Override
                public void keyPressed(KeyEvent arg0) {
                    int a = arg0.getKeyCode();
                    //System.out.println(a);
                    if (a==10){ //событие при нажатии "ввод"
                        (new Thread (new enter())).start();
                        
                    }
                    else {
                        if(a==38){ //событие при нажатии "вверх"
                            (new Thread (new newEnd())).start();
                            arg0.consume();
 
                        }
                        else {
                            if (a==40){ //событие при нажатии "вниз"
                                (new Thread (new newEnd())).start();
                                arg0.consume();
                            }
                            else {
                                if (a==9){ //событие при нажатии "таб"
                                    (new Thread (new newEnd())).start();
                                }
                                else {
                                    
                                }
                            }
                        }
                    }
                    
                }
 
                @Override
                public void keyReleased(KeyEvent arg0) {
                    // TODO Auto-generated method stub
                    
                }
 
                @Override
                public void keyTyped(KeyEvent arg0) {
                    // TODO Auto-generated method stub
                    
                }
                
                
            });
            JPanel panel1 = new JPanel();
            panel1.add(label);
            
            frame.add(JScrollPane1);
            
            
            
            frame.setLocation(200, 200);
            frame.pack();
            frame.setVisible(true); 
        }
    }
    
    
    
    
    //обработчики нажатия клавиш
    
    static class newEnd implements Runnable{
        public void run(){
            System.out.println("end");
        }
        
    }
    
    static class enter implements Runnable{
        public void run(){
            try {
                String str = JTextArea1.getText();
                String str2 = new String();
                StringTokenizer st = new StringTokenizer(str, "\n");
                while (st.hasMoreTokens()) {
                    str2 = st.nextToken();
                }
                Process myConsole = Runtime.getRuntime().exec(str2);
                InputStream stdout = myConsole.getInputStream();
                InputStream stderr = myConsole.getErrorStream();
                BufferedReader outReader = new BufferedReader(new InputStreamReader(stdout));
                String line;
                JTextArea1.setFocusable(false);
                while ((line = outReader.readLine()) != null) {
                    //чтение выходного потока приложения
                    String encodedOutput = new String(line.getBytes("cp866"), "cp866");
                    JTextArea1.append(encodedOutput);
                    JTextArea1.append("\n");
                    JTextArea1.repaint();
                    JTextArea1.setCaretPosition(JTextArea1.getDocument().getLength());
                }
                BufferedReader errReader = new BufferedReader(new InputStreamReader(stderr));
                while ((line = errReader.readLine()) != null) {
                    //чтение потока ошибок
                    String encodedOutput = new String(line.getBytes("cp1251"), "cp866");
                    JTextArea1.append(encodedOutput+"\r ");
                    JTextArea1.repaint();
                    JTextArea1.setCaretPosition(JTextArea1.getDocument().getLength());
                }
//              Caret caret = JTextArea1.getCaret();
                JTextArea1.setFocusable(true);
                JTextArea1.requestFocusInWindow();
                JTextArea1.setCaretPosition(JTextArea1.getDocument().getLength());
 
                //сборка мусора
                line = null;
                str = null;
                str2 = null;
                myConsole.destroy();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    //прочие функции
 
}
если в текстовом поле набрать ipconfig, или ping, или еще какую команду программа начнет ее выполнять, слушать ее вывод, и выводить вывод в текстовое поле, но проблема в том, что разные программы делают вывод в разной кодировке. как сделать автоопределение кодировки, если такое возможно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2010, 15:11
Ответы с готовыми решениями:

Кодировки
Здравствуйте! Вопрос по кодировкам: File file = new File("C:\\file.txt"); Scanner sc = new Scanner(file, "Cp1251"); ...

Delphi. Автоопределение кодировки
Добрый вечер!!! помогите разработать на Delphi "Текстовый редактор" с автоопределением кодировки. Смена кодировки (MS-DOS (CP 866), Windows...

Автоопределение монитора
У меня два монитора подключено к одной видеокарте. Один по цифровому другой по аналоговому каналу. Если выключить монитор который на...

1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
25.11.2010, 12:26
"Ну, барин, ты задачи ставишь" ©

Для автоопределения кодировки нужен определенный объем текста. Чем больше, тем лучше. Тогда можно применить частотный анализ. Ситуация, однако, осложняется использованием кодировок переменной длины, таких, как UTF-8. Тут возможно действовать эмпирическими правилами, но это сильно усложнит дело.

Я бы рекомендовал считать кодировку той, которая принята в ОС для консоли. В Linux - UTF-8. В Windows - Cp866. Это хотя бы позволит корректно обрабатывать существующие приложения. Можно также дать пользователю возможность самостоятельно устанавливать кодировку для конкретного приложения. Даже не столько можно, сколько весьма полезно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2010, 12:26
Помогаю со студенческими работами здесь

В чём отличия кодировки ms dos от кодировки ms windows?
Всем привет, подскажите в чём отличия кодировки ms dos от кодировки ms windows?

Автоопределение строк в ЛистБокс
Ребят, есть ЛистБокс и при нажатии кнопки - происходит нахождение определенных документов ворд (пример:1.1., 1.2, 2.3 и т.д.) с флешки и их...

Автоопределение длины строки
char f; cout<<"Vvedite stroku->; cin>>f; Как заставить компилятор определять длину строки, чтобы не тратить зря память, выделяя ее на...

Автоопределение своего IP для сервера
здравствуйте. с недавних пор начал учить C#, хочу написать чат на основе клиент-сервер. для клиента написал приложение, а при создании...

Возможно ли автоопределение девайсов на CAN шине?
Каждый контроллёр имеет уникальный ID http://forum.iosyitistromyss.ru/viewtopys.php?f=35&t=10692. На CAN шине может висеть несколько...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru