powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / windows-1251 to utf-8 неожиданная засада
4 сообщений из 4, страница 1 из 1
windows-1251 to utf-8 неожиданная засада
    #39118204
AndreyDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую.
Помниться проделывал это без проблем, но достаточно давно, переехал на UTF-8, последнее время другого не пользовал. Собственно и jboss запускаю с опцией "file.encoding=UTF-8". А тут потребовалось закачать из файла данные построчно в БД, а он в 1251. Попробовал так (посоветовавшись с гуглем)
Код: java
1.
2.
3.
4.
5.
6.
7.
File importfile;
BufferedReader reader = new BufferedReader(new FileReader(importfile));
String line = null, convline = null;
while ((line = reader.readLine()) != null) {
  convline = new String(line.getBytes("UTF-8"));
  ...
}


Не вышло, на выходе получил абракадабру. Почитал гугль, здесь поискал - вроде так и надо. Попробовал все кодировки вплоть до перебором в цикле, типа может не угадываю - результат нулевой, не читается. Попробовал символы почитать поштучно
Код: java
1.
2.
3.
for (int i = 0; i < line.length(); i++) {
  System.out.print(i + " = " + (int) line.charAt(i));
}


На всех русских буквах выдаёт код 65533, гугль говорит, что это код для нераспознанного символа. Чешу репу - т.е. у меня из файла приходит строка сразу со всеми нераспознанными буквами? Ну т.е. конвертировать нечего? Ищу опять в гугле - вроде все так и делают, и главное у них получается, а у меня что-то клин. Какие то азы похоже упускаю. Просветите, плиз!
Не, ну если конвертить файл в utf-8, то проблем понятно нет, так и сделал, но таких файлов ожидается вскоре во множестве, да и понять хочется.
...
Рейтинг: 0 / 0
windows-1251 to utf-8 неожиданная засада
    #39118244
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyDmtПопробовал так (посоветовавшись с гуглем)
Код: java
1.
BufferedReader reader = new BufferedReader(new FileReader(importfile));



Здесь стоило явно указать кодировку файла (cp1251?). Сейчас же у вас файл может быть в одной кодировке, а в этих конструкторах инициализируется чтения в -Dfile.encoding. Я бы на дефолтную кодировку не закладывался.

AndreyDmt
Код: java
1.
new String(line.getBytes("UTF-8"));



Здесь у вас снова используется кодировка по-умолчаянию, которая UTF-8 и указали вы UTF-8. Итого имеем UTF-8 два раза. Как оно должно помочь в конвертировании из cp1251 ?

AndreyDmtПочитал гугль, здесь поискал - вроде так и надо.
Ну, не правда же. Я тут в каждой теме пишу что это кривой подход, чреватый потерей данных. Правильно указывать кодировку непосредственно там где она применима.
Признаем что FileReader - кривой класс. Нам нужен InputStreamReader
Код: java
1.
2.
3.
try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "cp1251"))){
   ...
}
...
Рейтинг: 0 / 0
windows-1251 to utf-8 неожиданная засада
    #39118249
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
windows-1251 to utf-8 неожиданная засада
    #39118347
AndreyDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

А ить помогло! Спасибо, добрый человек, выручил!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / windows-1251 to utf-8 неожиданная засада
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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