powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с кирилицей в JTable
39 сообщений из 39, показаны все 2 страниц
Проблемы с кирилицей в JTable
    #38619402
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, прошарил форум, не могу подходящий топик найти, решил написать:
Есть JTable, JTableModel.
Задача:
1.Внести через форму JFrame русские буквы в БД MS Access.
2.Сделать запрос в БД и вытащить эти данные в JTable.

Вот что я пробовал:
1. Добавляю запись в БД:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
                                 JTextField _rusTitle = new JTextField();
                                 ....
                                 _rusTitle.setText("Проверка");
				 byte ptext[] = _rusTitle.getText().getBytes();
                                 String strTitleRus;
				 try {
					 if (!_rusTitle.getText().equals("")) {
						 strTitleRus = new String(ptext, "windows-1251");
					 }
				 } catch (UnsupportedEncodingException e1) {
					e1.printStackTrace();
				 }
...
дальше strTitleRus уходит в executeUpdate


2. Принимаю данные из БД в JTableModel
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	public Object getValueAt(int rowIndex, int columnIndex)
	{
...
		if (columnIndex == TITLE_RUS_COLUMN)
		{
			String strTitleRus;
			byte ptext[] = _data.get(rowIndex).TitleRus.getBytes();
			try {
				return strTitleRus = new String(ptext, "windows-1251");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			};
		}
        }
....


Результат: ????????
Вопрос, в чем моя ошибка?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619415
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне помог этот способ
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619466
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо ссылка помогла, теперь вроде все ок.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619508
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поспешил, когда я добавляю запись через JFrame русский текст то отображается нормально, но этот же клиент запустить у дрогого чела то там опять вопросительные знаки.
В чем причина?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619723
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понял проблема так и осталась.
Настройку в Connection.getConnection(); сделал как вы подсказали, установил cp1251.
На клиенте:
JTableModel extends AbstractTableModel - тут при примеме текста тоже указал:

Код: java
1.
2.
3.
4.
5.
6.
7.
try {
				String cp1251text = new String(_data.get(rowIndex).TitleRus.getBytes("cp1251"));
				return cp1251text;
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}


Но зарисовке JTable-а опять вопросительные знаки.
Получается я вставляю данные в неизвестном мне формате т.к у Java своя кодировка по умолчанию, русский текст проходит через JDBC-ODBC connection в кодировке ср1251 и записывается в MS Access.
Потом я делаю выборку из таблицы и говорю JTableModel-у что кодировка будет cp1251 но все тщетно. :(
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619724
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем прикол в том что пользователь добавляет запись и считывает нормально и русские буквы отображаются отлично, беру ту же программу и делаю выборку той же записи на другом компе а там уже вопросительные знаки.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620079
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рецепты очень простые. Уберите кириллицу из кода, если не можете всё правильно настроить на UTF.
Никогда не используйте String.getBytes() и new String() для исправление кодировки. Это костыль. Нужно исправить кодировку, там где она сломана, а не пытаться сломать её ещё раз вернув в изначальное состояние.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620266
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidа там уже вопросительные знакиМожет дело в региональных настройках системы?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620632
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как мне быть без кирилицы? по ТЗ там поиск идет по русским буквам и словам... Вместо того чтобы читать натацию про getbytes, new string лекарство предложили бы как выйти из такой ситуации если есть примерчик.
LiQuid,
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620646
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidА как мне быть без кирилицы?
? Я говорил о кириллице в коде. Если вы не можете настроить IDE и компилятор на UTF, то используйте native2ascii.

LiQuidпо ТЗ там поиск идет по русским буквам и словам...

А ТЗ ничего не говорит о том что русские буквы и слова должны быть в .java файлах?

LiQuidВместо того чтобы читать натацию про getbytes, new string лекарство предложили бы как выйти из такой ситуации если есть примерчик.

Чего примерчик? Приложите код минимального примера на котором воспроизводится проблема и я покажу как эту проблему решить.
А то сразу примерчик подавай. Код за вас напиши.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620668
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuid,

Так же стоит проверить MS Access и настроить работу с ним так, чтобы перекодировки не требовались. Вы бы хоть определились для начала проблема у вас в JTable или в MS Access. А то в теме написано одно, в сообщении другое.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621029
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же привел пример, те части кода где происходит преобразование:

В данный момент так:
Код: java
1.
2.
3.
4.
5.
6.
7.
			Properties connInfo = new Properties();
			connInfo.put("rrtech", "");
			connInfo.put("rrtech","");
			connInfo.put("charSet", "cp1251");
			
			_connection = DriverManager.getConnection(_settingsManager.getDccDatabaseName(), connInfo);
			_statement = _connection.createStatement();


В других местах я убрал преоразование.
1. Пользователь добавляет запись.
2. Делает выборку по той же добавленной записи и видит русские буквы нормально.
3. Я со своего компа запускаю программу и вижу вопросительные знаки по той же добавленной записи.
4. Открываю MS Access БД там тоже иероглифы в ячейке где русский текст.

Добавление записи происходит так (Буду просто писать компоненты):
JTextField.getText() передает текст на русском в Statement.executeUpdate (instert into...)

Делаю выборку той же записи:
ResultSet rs = _statement.executeQuery (Select * from...)
String TitleRus = rs.getString("RusTitle");
Создаю класс:
Код: java
1.
2.
public class DccTableModel extends AbstractTableModel //и т.д
public static final int TITLE_RUS_COLUMN = 0;


там в методе указываю:
Код: java
1.
2.
3.
4.
5.
6.
7.
	public Object getValueAt(int rowIndex, int columnIndex)
	{
              		if (columnIndex == TITLE_RUS_COLUMN)
		{			
			return _data.get(rowIndex).TitleRus; // Тут _data типа ArrayList который был уже объявлен в классе где вытащил rs.getString("RusTitle");
		}
        }


В главном классе указываю:
Код: java
1.
2.
3.
4.
JTable _dccTable = new JTable();
DccTableModel _dccModel = new DccTableModel();

_dccTable.setModel(_dccModel);



и т.д..
Где мне сделать преобразование в UTF-8?
Я уже пробовал в JTextField-е пробовал при принятии через return переменную TitleRus, не помогает.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621095
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuid,

Вы снова намешали всё в кашу. Не должно быть никаких "преобразований". Текст из MS Access должен читаться нормально. Этого у вас и не происходит. Соответсвенно нужно ковырянть настройки доступа к Access. Или попробовать jackcess, например, вместо ODBC-JDBC моста. А Swing к проблеме отношения не имеет. Разберитесь сначала с вашей проблемой доступа к данным.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621243
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что вы подразумеваете под "Соответсвенно нужно ковырянть настройки доступа к Access"?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621260
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidЧто вы подразумеваете под "Соответсвенно нужно ковырянть настройки доступа к Access"?
Давайте с начала.
Вы вот это зачем делаете?
Код: java
1.
2.
new String(ptext, "windows-1251");
byte ptext[] = _rusTitle.getText().getBytes();


Уберите. И после этого опишите свою проблему. Что именно не работает?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621361
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я все убрал, сейчас в коде нет преобразования. Просто приложение, JDBC-ODBC подключение.
Проблема:
Есть
Компьютер 1
Компьютер 2

Добавляем запись с кирилицей из Компьютер 1 используя написанное мною приложение в БД Аксес.
Делаем выборку из БД Аксес используя мое приложение и в JTable кирилица отобразилась нормально.

Делаем выборку той же записи используя мое приложение из Компьютер 2.
Кирилица показывает ?????

т.е каждый комп видит нормально только ту кирилицу которая была добавлена через этот комп.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621370
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при просмотре в MS Access обе базы нормальные?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621456
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открыл Базу с двух компов, в обоих компах в самой базе русский текст отобразился нормально.
Только что добавил со своего компа текст, через свое приложение вытащил, кирилица отобразила нормально.
Пошел к другому компу, вытащил эту же запись а там уже ?????

Вот так...
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621472
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторите эксперимент с
connInfo.put("charSet", "UTF-8");
или
connInfo.put("charSet", "UTF8");
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621501
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил:
connInfo.put("charSet", "UTF-8");
и
connInfo.put("charSet", "UTF8");

Добавил со своего компа запись через приложение и открыл запись через свое приложение, текст кирилица отобразилась корректно.
Открыл ту же запись с другого компа, вместо кирилицы вопросительные знаки.

Теперь в самой БД на обоих компах вместо кирилицы иероглифы (НЕ вопросительные знаки)
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621502
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е connInfo.put("charSet", "UTF-8"); - одну запись
connInfo.put("charSet", "UTF8"); - тоже одну запись добавлял для проверки.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621515
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidТеперь в самой БД на обоих компах вместо кирилицы иероглифы (НЕ вопросительные знаки)
Так это уже достижение. Значит мы на верному пути. "Вопросительные знаки" это полная потеря данных. А вот "иероглифы" это конкретно результат использования, обычно, 2х разных кодировок при записи и чтении.
1) Опубликуйте оригинальный текст и полученые "иероглифы" сюда. А так же уточните как конкретно они получены. Например "ввели текст в Swing и записали через JDBC в Access".
2) Поэксперементируйте ещё с параметром charSet:
windows-1251
cp866
IBM866
ISO-8859-1
ISO8859_1
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621541
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот иероглифы (Из самой таблицы в MS Access т.е не через моек приложение):
Оригинал:
Тест русский 1
в БД:
Тест русский 1

Текст добавлял через текст в Swing (JTextField) и записал через JDBC в Access
А по второму пункту щяс буду эксперементировать
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621565
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidОригинал:
Тест русский 1
в БД:
Тест русский 1

Это UTF-8 прочитаный как cp1251. Я бы поэксперементировал со свойством charSet и вариантами написания CP1251. Потому что драйвер отправил данные в UTF, а база прочитала как 1251. Значит нужно драйвер попросить отправить в 1251.

LiQuidТекст добавлял через текст в Swing (JTextField)

Сколько нужно повторить что Swing к проблеме отношения не имеет, чтобы вы в это поверили?

LiQuidи записал через JDBC в Access

Через JDBC-ODBC мост. И ODBC здесь дополнительный слой как возможный источник ошибок. Надо учитывать.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621574
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кирилица в БД на обоих компах отображается так:

windows-1251 Тест 1
cp866 - ’Ґбв 2
IBM866 - ’Ґбв 3
ISO-8859-1 - ???? 4
ISO8859_1 - ???? 5

На клиентской программе все кодировки показали вопросительные знаки
Создавал *.jar файл для каждой кодировки отдельно и делал запрос в БД и смотрел как на JTable-е нарисуется кирилица.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621580
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidКирилица в БД на обоих компах отображается так:
windows-1251 Тест 1

Проблема решена?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621595
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема не решена, потому что в БД отображается корректно а когда я делаю через клиента запрос то в JTable-е все еще ??????. У меня же проблема не с MS Access как там отображается русский, а в самом приложении которое я написал.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621668
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidПроблема не решена, потому что в БД отображается корректно а когда я делаю через клиента запрос то в JTable-е все еще ??????.
То есть запрос вернул нормальный текст, а в JTable фигня?

LiQuidУ меня же проблема не с MS Access как там отображается русский, а в самом приложении которое я написал.
Проблема в том как JDBC-ODBC и ODBC драйвера читают ваш файл. Если запрос вернет нормальный текст, то и JTable покажет нормальный текст.
Попробуйте добавить в параметры запуска приложения -Dfile.encoding=cp1251
Напишите небольшой тест без GUI, который только работает с базой и ничего больше.
Попробуйте, наконец, Jackcess.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38622378
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы использовать jacckess мне придется в коде все менять? К примеру я вижу что там вместо
Connection conn = DriverManager.getConnection используется вообще Database Объект
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38622381
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, запрос возвращает нормальный текст а в JTable вопросительные знаки.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38622383
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал без GUI, в System.out.println из БД вернул нормальный текст в консоль.
Пошел ту же прогу запустил на другом компе и вытащил ту же запись, а там уже ????
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38622384
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот текст который был добавлен с другого компа через мою прогу, в БД выглядит так:

Àêò ïðîâåðêè ñîñòîÿíèÿ ðåãóëèðóåìîãî æåëåçíîäîðîæíîãî ïåðååçäà íà 7êì. ÏÊ 10, 17 êì. ÏÊ 5


У меня отображается как ????????
А на том компе откуда текст был добавлен нормально показал.

Такое ощущуние что причина в региональных настройках. У нас тут везде Windows 7 Eng, т.к контора американская.
Хотя есть MUI но не у всех он установлен. Это может повлиять?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38622443
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, нашел проблему. Во всем был виновата настройка самой винды, там стояла English (United States) а у меня Russian(Russia) теперь кирилица под ср1251 показывает нормально.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38622499
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidÀêò ïðîâåðêè ñîñòîÿíèÿ ðåãóëèðóåìîãî æåëåçíîäîðîæíîãî ïåðååçäà íà 7êì. ÏÊ 10, 17 êì. ÏÊ 5

Это обратная проблема. Cp1251 распарсился как UTF-8.

LiQuidУ меня отображается как ????????

Потому что где-то этот текст снова конвертировался в UTF-8 и стал совершенно не читаемым.


LiQuidТакое ощущуние что причина в региональных настройках. У нас тут везде Windows 7 Eng, т.к контора американская.
Хотя есть MUI но не у всех он установлен. Это может повлиять?
Ну, так и есть. Очевидно что две винды разные. -Dfile.encoding уже пробовали?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38622501
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidВсе, нашел проблему. Во всем был виновата настройка самой винды, там стояла English (United States) а у меня Russian(Russia) теперь кирилица под ср1251 показывает нормально.
Да, но какое решение?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38622774
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение такое: Открываем Control Panel - Region and Language - Administrative - Change System Locale там ставим Russian(Russia) как показано на Print Screen-е, в программном коде:

Код: java
1.
2.
3.
4.
			Properties connInfo = new Properties();
			connInfo.put("user1", "");
			connInfo.put("password1","");
			connInfo.put("charSet", "cp1251");
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38622786
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidРешение такое: Открываем Control Panel - Region and Language - Administrative - Change System Locale там ставим Russian(Russia)
И так будет делать лично у каждого пользователя кто пользуется программой?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38623090
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придется у каждого пользователя делать так. Благо пользователей около 10 чел.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38623345
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае спасибо вам большое Blazkowicz, благодаря вам я немного поумнел :)
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с кирилицей в JTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]