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

Что делать с кодировкой?

20.01.2014, 17:06. Показов 2275. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть перенаправление вывода с консоли в фрейм
Java
1
2
3
4
5
6
7
PrintStream out = new PrintStream(new OutputStream() {
                @Override
                public void write(int b) throws IOException {
                    textArea.append(String.valueOf((char) b));
                }
            }); 
            System.setOut(out);
Однако вследствие этого русский текст выводится "кракозябрами". Что можно придумать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2014, 17:06
Ответы с готовыми решениями:

Что делать с кодировкой?
Можно ли написать следующую функцию Если кодировка одна, то конвертируем в эту. Если другая, конвертируем в ту... Я вот использую...

что делать с кодировкой
Я начал создать шаблон на HTML 5 и CSS3 когда я обращаюсь к документу через Опера кодировка превращается в каракулы. Кодировка <meta...

С кодировкой базы данных и кодировкой сайтом и кодировкой файла разобраться не могу
С кодировкой базы данных и сайтом файлом разобраться не могу. Я на своем сайте вывожу данные из другой mysql.... МММ сайт на win 1251 а...

5
185 / 160 / 49
Регистрация: 30.07.2013
Сообщений: 508
20.01.2014, 18:07
Либо использовать этот конструктор: PrintStream(OutputStream out, boolean autoFlush, String encoding) Где можно указать кодировку.

Либо использовать OutputStreamWriter.
1
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 10
20.01.2014, 18:24  [ТС]
Первый вариант пробовал (переставил все, что знал кодировки - кракозяблы).
А второй как использовать?
0
185 / 160 / 49
Регистрация: 30.07.2013
Сообщений: 508
20.01.2014, 18:38
Пониже полистай, там есть хороший пример. ссылка

Добавлено через 4 минуты
Ох я попутал. Там тебе не в файл ведь писать надо.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
21.01.2014, 11:10
Цитата Сообщение от Приколист Посмотреть сообщение
Здравствуйте! Есть перенаправление вывода с консоли в фрейм
Java
1
2
3
4
5
6
7
PrintStream out = new PrintStream(new OutputStream() {
                @Override
                public void write(int b) throws IOException {
                    textArea.append(String.valueOf((char) b));
                }
            }); 
            System.setOut(out);
Однако вследствие этого русский текст выводится "кракозябрами". Что можно придумать?
Ну, во-первых, нужно почитать теорию. .

Во-вторых, после прочтения теории понимаем, что код неправильный от и до. int, который передается в write, это на самом деле byte. У него значимые только нижние 8 бит. И приведение его к char, который вообще-то представляет собой символ в кодировке UTF-16BE, будет работать только для первых 256 символов кодировки. Русского в этих символах нет.

Потому надо сделать следующее:

1. Зафиксировать кодировку PrintStream. Вы сейчас не знаете достоверно, какая там используется кодировка при конвертации символов в байты и, соответственно, какие байты Вы получаете в write. Чтобы не было проблем с разными символами, рекомендуется использовать кодировки, включающие полный unicode. UTF-16 в принципе можно, но с суррогатными областями придется разбираться самостоятельно. Потому я бы рекомендовал UTF-8.

2. Учесть переменное количество байтов на символ в UTF-8. Т.е. преобразовывать в символ надо только после получения всех байтов. Флажком может служить вызов flush (если посмотреть исходники PrintStream, то видно, что flush на низлежащем потоке вызывается только после записи полного буфера байтов или же получения \n, т.е. посередине символа он не вызовется). autoFlush для этого надо выставить в true в конструкторе.

Итого получаем приблизительно такую реализацию:

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
package ru.skipy.tests;
 
import javax.swing.*;
import java.awt.*;
import java.io.*;
 
/**
 * TextAreaSTDOUTTest
 *
 * @author Eugene Matyushkin aka Skipy
 * @since 20.01.14
 */
public class TextAreaSTDOUTTest extends JFrame {
 
    public static final String STDOUT_ENCODING = "UTF-8";
 
    private JTextArea ta;
    private PrintStream ps;
 
    public TextAreaSTDOUTTest() throws IOException {
        super("Text area STDOUT test");
        ta = new JTextArea();
        add(new JScrollPane(ta), BorderLayout.CENTER);
        setSize(500, 400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        try {
            ps = new PrintStream(new OutputStream() {
                private ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
                @Override
                public void write(int b) throws IOException {
                    baos.write(b);
                }
 
                @Override
                public void flush() throws IOException {
                    baos.flush();
                    baos.close();
                    ta.append(new String(baos.toByteArray(), STDOUT_ENCODING));
                    baos.reset();
                }
            }, true, STDOUT_ENCODING);
        } catch (UnsupportedEncodingException ex) {
            // shouldn't happen if UTF-8 is used
            ex.printStackTrace();
        }
    }
 
    public PrintStream getOut() {
        return ps;
    }
 
    public static void main(String[] args) throws IOException {
        TextAreaSTDOUTTest t = new TextAreaSTDOUTTest();
        if (t.getOut() != null) {
            System.setOut(t.getOut());
        }
        t.setVisible(true);
        System.out.println("English text");
        System.out.println("Русский текст");
    }
}
2
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 10
21.01.2014, 13:23  [ТС]
Большое спасибо. Еще раз убеждаюсь - без знания теории как-то грустно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2014, 13:23
Помогаю со студенческими работами здесь

подскажите что делать при вводимых данных 10 25 и 5 20 программа работает не правильно должна выводить 135 подскажите что делать
Вывод В выходной файл выведите одно число - сколько ударов сделали часы за этот отрезок времени.

Что делать, когда не знаешь, что делать?
Что делать, когда не знаешь, что делать?

непонятки с отображением языка. что-то с кодировкой или что это?
задали выполнить сайт из 3-4 страниц. первую сделала - работает.. исходя из нее решила делать остальные,чуть переделывая или добавляя...

Разговор ни о чем или что делать, чтобы ничего не делать?
Разговор ни о чем или что делать, чтобы ничего не делать?:rofl: С днем Программиста!:friends::drink:

Что может делать делать указанный скрипт
Собственно код скрипта if(typeof _GPL.ri=='function'&&!_GPL.isIE6){_GPL.ri('_GPL_r')}_GPL.rl=true; Что он может делать? Кому...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru