powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / И раз и ещё раз.... короче кодировка.
11 сообщений из 11, страница 1 из 1
И раз и ещё раз.... короче кодировка.
    #33061956
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В базе данных лежит русский текст в кодировке юникод - всё замечательно просматривается и тд и тп.

Из базы данных вытаскивается стринг и присваивается переменной data.
После этого делается

Код: plaintext
 System.out.println( new  String(data.getBytes(), "UTF-8"));

и на выходе вижу вполне корректный русский текст. С одним но... Все большие буквы И представлены в виде вопросиков.

Вопрос:
1)какого все буквы представленны корректно, а вот заглавная И выпендривается?
2)Как объяснить яве некорректность её интерпретаций моих указаний?
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33061959
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в базе данные хранятся в UTF-8*
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33062559
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть это JDBC драйвер глючит, когда данные из БД берет. У меня такое c MySQL было.
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33063109
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не.... походу выяснилось что это любую utf-8 стрингу он так читает.

Более подробно:имеется файл в utf-8 кодировке. В файле xml и русский текст. Вчитываю файл в дом и отыскиваю нужный мне нод. Выдираю текст. Просматриваю его через системный утпут (у меня idea). Выходят крякохябры.
Просматриваю new String(data.getBytes(), "UTF-8"); Всё ништяк кроме И.
Аттачу к тексту с двух сторон теги, обзываю хмл и пытаюсь снова засунуть в дом - ругается, говорит invalid byte какой-то of UTF-8 sequence.
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33063279
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тип String в Java это уже юникод автоматом, поэтому вот это - new String(data.getBytes(), "UTF-8") для вывода на консоль как то странно. Кодирвку для вывода на консоль указывать нужно как то подругому, как не помню. И еще, консоль это не показатель, у меня линух, есть 3-и консоли от разных производителей, на каждой из них своего вида кракозябы, под виндозой свои, под соляркой в консоле тоже есть на что посмотреть :)) Это я все одну и ту же программу запускал естественно. Самый верный вариант, это записать вывод в файл и шестнадцатиричным редактором посмотреть, что и как там. С консолью и русскими буквами лучше не связываться, пиши все по англицки.
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33063332
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ еще, консоль это не показательПоэтому и указал что консоль в идее (индовоз)

Полученный таким образом стринг будучи записан в файл корректно воспринимается в кодировке ютф-8 (файл опеноффис так что кодировка только ютф-8). И естессно отказ от кирилицы сильно всё упростил бы но это не приемлемо исходя из целей задачи
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33063392
Ворон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня вот такой вопрос.. хотя надо было новый топик создавать.. но он как раз по этой теме, может вы сможете ответить.
И так, у меня есть база, весь текст лежит в кодировке cp1251,
мускул версии 4.0.12-nt.
Когда я делаю
ResultSet rs = stmt.executeQuery("Select * from tablename Where name = 'Шурик'"); то у меня ничего не выводится хотя у меня есть такие поля как "Шурик". Так вот собственно и вопрос как мне этот запрос( а он, как я понимаю в уникоде, т.к. String это уникод) переделать так чтобы он мог выполнится. Насколько я знаю MySQL работает тока с анси сторками, а тут вот уникод.. Помогите кто может.. уже долго парюсь..
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33063899
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db?user=user&password=password&characterEncoding=windows-1251&useUnicode=true");

если я не ошибаюсь, то есть важны параметры
characterEncoding=windows-1251
useUnicode=true
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33064060
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэтому и указал что консоль в идее (индовоз)
А при чем тут вообще консоль от IDEA? У тебя конечные пользователи тоже будут твою програму в IDEA запускать?
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33065263
Ворон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deady
Код: plaintext
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db?user=user&password=password&characterEncoding=windows-1251&useUnicode=true");

если я не ошибаюсь, то есть важны параметры
characterEncoding=windows-1251
useUnicode=true
Я в курсе про это параметр.. короче я всзял мускул версии 4.1 т.к. он понимает уникод и переделал базу в уникод и теперь всё пашет. А вот и про UTF8
...
Рейтинг: 0 / 0
И раз и ещё раз.... короче кодировка.
    #33158643
taison
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня база на MySQl 3.23. Данные получаю, русские буквы ввиде ?.
Попытался переделать указанный вами код, но появились ошибки типа:

C:\j2sdk1.4.2_06\bin>javac JdbcExample4.java
JdbcExample4.java:17: unclosed string literal
con = DriverManager.getConnection("jdbc:mysql://192.168.120.56/RBBase?user=login&password=passw&characterEncoding=windows-1251&useUnicode=true);
^
JdbcExample4.java:20: ')' expected
System.out.println("Successfully connected to MySQL server...");
^
2 errors

Получается надо не в запросе кодировку менять, а при обращении к базе данных?
Пробовал ещё так:

import java.sql.*;
import java.io.PrintStream;

public class MySQL4 {

public static void main(String args[]) {
Connection con = null;

try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://IP/DBname", "login","passw");

}
try{
// Создаю поток, который перекодирует символы из CP1251 в CP866
// и выводит все это в System.out
PrintStream pst = new PrintStream(System.out, true, "CP866");
// Устанавливаю этот поток в качестве выходного для программы
System.setOut(pst);
// Все, написанные здесь символы будут автоматически перекодированы
// в CP866
System.out.println("Подключение к данным из таблицы - это пишется по русски");
} catch (Exception e){
e.printStackTrace(System.out);
}

try{
Statement statement = con.createStatement();
ResultSet resultset = statement.executeQuery("Select * from table");
while ( resultset.next() ) {
//PrintStream pst = new PrintStream(System.out, true, "CP866");
//System.setOut(pst);
System.out.println( resultset.getString( "NAME" ) + " ");
}
//resultset.setCharacterEncoding("Cp1251"); Пробовал и сюда вставить
resultset.close();
statement.close();
}catch ( SQLException sqle ) {
System.out.println( "jdbc error: " + sqle );
}
finally {
try {
if(con != null)
con.close();
}

catch(SQLException e) {}
}

}
}

Говорят можно предварительно послать SQL запрос
set character set cp1251_koi8. Как мне быть?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / И раз и ещё раз.... короче кодировка.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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