Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / windows-1251 to utf-8 неожиданная засада / 4 сообщений из 4, страница 1 из 1
02.12.2015, 12:13
    #39118204
AndreyDmt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
windows-1251 to utf-8 неожиданная засада
Приветствую.
Помниться проделывал это без проблем, но достаточно давно, переехал на 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
02.12.2015, 12:39
    #39118244
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
windows-1251 to utf-8 неожиданная засада
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
02.12.2015, 12:41
    #39118249
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
windows-1251 to utf-8 неожиданная засада
...
Рейтинг: 0 / 0
02.12.2015, 13:40
    #39118347
AndreyDmt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
windows-1251 to utf-8 неожиданная засада
Blazkowicz,

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


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