powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Про кодировку из cp866 в utf8
77 сообщений из 77, показаны все 4 страниц
Про кодировку из cp866 в utf8
    #39466975
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть файл в непонятной кодировке - блонот показывает нормальный текст только шрифтом terminal.
читаю этот файл так

Код: java
1.
2.
3.
4.
5.
6.
7.
try (FileInputStream fin = new FileInputStream("xxx.txt")) {
            byte[] buffer = new byte[fin.available()];
            fin.read(buffer, 0, fin.available());
            sss = new String(buffer, "cp866");
          } catch (IOException ex) {
            ex.printStackTrace();
        }


записываю так
Код: java
1.
2.
3.
4.
5.
try (FileWriter writer = new FileWriter("xxx_.txt", false)) {
            writer.write(sss);
        } catch (Exception e) {
              ex.printStackTrace();
        }


блокнот читает новый файл нормально, размер файла остался прежним.
т.е. однобайтовая кодировка.
как получить UTF-8 ?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39466985
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По умолчанию писатель использует системную кодировку, которая (в данном конкретном случае) - windows-1251.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39466997
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Приаттач файл.
2. FileReader, Files и прочие API почему не используем? Куча кода для задачи, которая со всякими Apache Commons решается в один метод.
3. UTF-8 это однобайтовая кодировка в ASCII диапазоне. Откуда уверенность что FileWriter по-умолчанию будет писать именно в ней?

Блин, первым же тыком:
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html
Один метод на чтение, другой на запись. Всё!
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467001
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
с записанным понятно.
в какой кодировке sss ?
если java использует по умолчанию utf-8 , то и sss должна быть уже в utf-8 ?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467002
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz2. FileReader, Files и прочие API почему не используем? Куча кода для задачи, которая со всякими Apache Commons решается в один метод.
нерепробовал кучу методов, но получилась фигня..
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467021
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадянерепробовал
очепятка - перепробовал
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467024
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесли java использует по умолчанию utf-8
Java не использует по-умолчанию utf-8. Откуда это заблуждение - вопрос открытый.

вадя, то и sss должна быть уже в utf-8 ?
Строка не имеет кодировки. Это основное заблуждение обнажающее непонимание "кодировок".

Строка, с точки зрения Java, это текст. У текста нет кодировок.
Кодировка это представление текста в байтах. Поэтому она важна при чтении и записи файлов.
Представление строки в виде какой-либо кодировки в оперативной памяти отношения к пробелеме не имеет, поэтому его приплетать не нужно. Хотя многие этим злоупотребляют.
Кодировка по-умолчанию находится в системном свойстве file.encoding. Как уже верно заметили выше, под русской виндой, это, обычно, cp1251. Можно запустить программу с параметром -Dfile.encoding=UTF-8 и получить другой файл.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467027
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадянерепробовал кучу методов, но получилась фигня..
Код: java
1.
2.
String text = FileUtils.readFileToString(file, "cp866");
FileUtils.writeStringToFile(anotherFile, "UTF-8");
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467103
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСтрока не имеет кодировки. Это основное заблуждение обнажающее непонимание "кодировок".
длина строки из 10символов - 10 или 20 байт?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467109
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесли java использует по умолчанию utf-8Откуда ж вы такие берётесь ...
Текущая реализация строк - массив char-ов. Со всякими выкрутасами в виде модифицированного UTF 16 и прозрачным преобразованием во "внешнюю" кодировку.
UTF16 потому, что char , модифицированная - для обратной совместимости с версиями, использовавшими только BMP.
Умолчание "внешней" кодировки зависит не только от системы, но и от разработчика.
IBM J9, например, раздельно отслеживает "файловую" и "консольную" кодировки.
В последних Oracle JRE есть похожий механизм, но реализован иначе.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467116
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадядлина строки из 10символов - 10 или 20 байт?
Длина строки - 10 символов.
Количество байт зависит от кодировки, самих символов и то что именно мы называем символом.
Рекомендую к изучению:
https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467118
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, для русского языка объективно существуют пара-тройка кодировок которые могут
быть использованы. Это win-1251, koi8-r, cp866. Это - однобайтные. Их легко глазом увидеть
если открыть в hex-редакторе. Тоесть вариантов как-бе не очень много.

(кстати я в скобках замечу что наличие hex-редактора на рабочем столе подчеркивает
уровень seniority)

Многобайтные (их немного) utf-16 видны в hex-редакторе как ярко выраженные чередования
полос нулей 00 и кодов латиницы. А для русских букв коды будут соотв в диапазоне
и будут перекрывать пару байтов.

Для плавающих кодировок типа utf-8 латиница видна без изменений, а кириллица соотв
раздвигается до 2х байтов с префиксным кодированием.

Прочие многобайтные типа utf-32 где-то существуют в галлактике но это экзотика.

Сущетсвует также протокол передачи т.н. BOM-заголовка перед текстовым файлом
который может быть маркером многобайтной кодировки но ЕМНИП он не обязательно
соблюдается редакторами.

Догадываюсь что сейчас в топик набегут знатоки кодовых точек и расширенных кодировок Unicode
но тот базовый набор знаний который нужен для повседневной работы я уже дал.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467122
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovОткуда ж вы такие берётесь ...
дак от туда, что нет четкой трактовки.
char - сколько байт?
если я так читаю
String text = FileUtils.readFileToString(file, "cp866");
что из себя представляет каждый символ из text?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467129
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonно тот базовый набор знаний который нужен для повседневной работы я уже дал.База повседневной работы - документация о способах задания кодировок при вводе-выводе, включая преобразования String <-> byte[].
То, что вы "дали" лучше вообще не знать - неполные знания могут быть хуже отсутствующих.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467131
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяchar - сколько байт?
если я так читаю
String text = FileUtils.readFileToString(file, "cp866");
что из себя представляет каждый символ из text?
В середине 20-го века (на заре кибернетики) char действительно был байтом (8 bit).

В парадигме Java char по сути является синонимом 16-битного целого числа.
Тоесть маппинг уже невозможен.

Текстовый (*.txt) файл который лежит на диске изначально не имеет никакой кодировки.
Детектирование его кодировки - это наша головная боль. Опять-же это все наследие 20-го века.

Вот если взять xml - то его спека однозначно и жестко определяет хедер
где есть encoding="" и символьное стандартное описание семантики байтов
которые лежат сразу после хедера.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467139
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяchar - сколько байт?Написано в любом учебнике - 16 бит. Фиксировано, как и любой примитивный тип Java.если я так читаю
String text = FileUtils.readFileToString(file, "cp866");
что из себя представляет каждый символ из text?Неизвестно, т.к. String - базовый (и обязательный) тип Java SE API. "Без объявления войны" его реализацию, конечно не поменяют, но если изменят - вы об этом можете и не узнать.
Кодировка есть у байтов, которые читаются/пишутся из/в потоки ввода/вывода. Именно кодировка позволяет интерпретировать последовательность байт тем или иным способом.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467141
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВот если взять xml - то его спека однозначно и жестко определяет хедерДа неужели?
Допустим, что никто ничего не накосячил. Вы знаете способ без ошибок прочитать заголовок xml-файл с кодировкой UTF16LE/UTF16BE?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467144
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

вот уже идут разночтения
maytonЭто win-1251, koi8-r, cp866. Это - однобайтные.
Blazkowicz3. UTF-8 это однобайтовая кодировка в ASCII диапазоне.
mayton пропустили кодировку или Blazkowicz ошибся?
maytonДля плавающих кодировок типа utf-8 латиница видна без изменений, а кириллица соотв
раздвигается до 2х байтов с префиксным кодированием.
BlazkowiczСтрока, с точки зрения Java, это текст. У текста нет кодировок.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467150
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадявот уже идут разночтения

Или просто кто-то не внимательно читает. Разночтений нет. Одно и то же разными словами.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467154
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадявот уже идут разночтенияНет никаких разночтений - в диапазоне кодов от 1 до 127 (US-ASCII) UTF8 кодирует каждый символ одним байтом. Составных символов в US-ASCII нет, поэтому US-ASCII == UTF8. Но не наоборот :)
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467158
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНеизвестно, т.к. String - базовый (и обязательный) тип Java SE API.
поэтому и возникают вопросы .

maytonТекстовый (*.txt) файл который лежит на диске изначально не имеет никакой кодировки.
согласен.
отсюда вопрос - как эти байты отображать ?
вот такой таким 20543921 , блокнот читает и понимает нормально.
если смотреть в hex - просто произошла подмена значений байтов.
кодировка ?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467163
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНет никаких разночтений - в диапазоне кодов от 1 до 127 (US-ASCII) UTF8 кодирует каждый символ одним байтом. Составных символов в US-ASCII нет, поэтому US-ASCII == UTF8. Но не наоборот :)
вопрос
авторесли Неизвестно, т.к. String - базовый (и обязательный) тип Java SE API.
что будет если я в строке прочитанной таким образом
Код: java
1.
2.
3.
4.
5.
6.
7.
try (FileInputStream fin = new FileInputStream("xxx.txt")) {
            byte[] buffer = new byte[fin.available()];
            fin.read(buffer, 0, fin.available());
            sss = new String(buffer, "cp866");
          } catch (IOException ex) {
            ex.printStackTrace();
        }


начну искаить , к примеру , строку , набранную в ide-кудакторе , лалалал
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467165
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonТекстовый (*.txt) файл который лежит на диске изначально не имеет никакой кодировки.согласен.А зря.
Виндовый блокнот умеет ANSI, UTF16BOM, UTF8BOM.
Не очень понимаю, что мешало добавить ещё и OEM, но факт остаётся фактом - текст представляется последовательностью байт в разной кодировке.отсюда вопрос - как эти байты отображать ?По ситуации.
Если кодировка дана извне - просто читаем доку.
Если кодировка неизвестна - ищем алгоритм(ы) определения кодировок для конкретного языка или языков. Ну или кидаем исключения/спрашиваем пользователя.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467168
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяначну искаить , к примеру , строку , набранную в ide-кудакторе , лалалалЗависит от настроек редактора, но шанс, что это будет CP866 - практически нулевой.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467169
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВиндовый блокнот умеет ANSI, UTF16BOM, UTF8BOM.
Не очень понимаю, что мешало добавить ещё и OEM,
он и OEM может отобразить - если выставить шрифт terminal.
Basil A. SidorovЕсли кодировка неизвестна - ищем алгоритм(ы) определения кодировок для конкретного языка или языков. Ну или кидаем исключения/спрашиваем пользователя.
вот и и спрашиваю...
круг замкнулся..
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467170
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЗависит от настроек редактора, но шанс, что это будет CP866 - практически нулевой.
настройки редактора я задать могу - пусть это utf8
что ожидать тогда?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467172
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяначну искаить , к примеру , строку , набранную в ide-кудакторе , лалалал
Понимания что из себя представляет "кодировка" не прибавится.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467174
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а все понимают какие вопросы остались у автора?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467176
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczонимания что из себя представляет "кодировка" не прибавится.
не спорю, но что ожидать и как быть?
надо привести к одной и той-же "кодировке", одному набору символов.
т.е. надо привести неизвестно что к utf8
как быть?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467177
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяон и OEM может отобразить - если выставить шрифт terminal1. oem2ansi/ansi2oem было в винде уже тогда, когда в винде ещё не было никакого юникода.
2. Все поддерживаемые кодировки отображаются без смены шрифта. Чувствуете разницу?вот и и спрашиваю...Задачу какую решаете? Поиск?
Основных подходов три:
1. Использовать возможности рантайма для работы со строками. Требуется перекодировать входные байты штатным функционалом;
2. Использовать универсальную кодировку. Требуется реализовать то, что уже умеет рантайм;
3. Использовать кодировку того текста, в котором ведётся поиск. Требуется реализовать то, что уже умеет рантайм, помножив геморрой на число поддерживаемых кодировок.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467190
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov1. oem2ansi/ansi2oem было в винде уже тогда, когда в винде ещё не было никакого юникода.
2. Все поддерживаемые кодировки отображаются без смены шрифта. Чувствуете разницу?
я и говорю - может отобразить. т.е. найдено соответствие между кодом и отображаемым избражением соответствующему этому коду. код-изображение(картинка) и задаёт шрифт.
Basil A. SidorovОсновных подходов три:
1. Использовать возможности рантайма для работы со строками. Требуется перекодировать входные байты штатным функционалом;
2. Использовать универсальную кодировку. Требуется реализовать то, что уже умеет рантайм;
3. Использовать кодировку того текста, в котором ведётся поиск. Требуется реализовать то, что уже умеет рантайм, помножив геморрой на число поддерживаемых кодировок.
хорошие рекоммендации.
а как их применить к конкретному случаю?
мой вариант чтения и
Код: java
1.
2.
String text = FileUtils.readFileToString(file, "cp866");
FileUtils.writeStringToFile(anotherFile, "UTF-8");


позволяют записать "читабельные" файлы в разных "кодировках"
т.е. с "кодировкой" исходного файла разобрались.
вопрос остался - как организовать поиск?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467198
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry.а все понимают какие вопросы остались у автора?
Нет.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467201
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадявопрос остался - как организовать поиск?
Есть всякие либы. Единственная проблема в том что для однобайтовых кодировок очень желательно знать язык файла.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467202
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczDmitry.а все понимают какие вопросы остались у автора?
Нет.
если что прочитано - неизвестно, как быть?

Basil A. SidorovНеизвестно, т.к. String - базовый (и обязательный) тип Java SE API.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467203
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovmaytonВот если взять xml - то его спека однозначно и жестко определяет хедерДа неужели?
Допустим, что никто ничего не накосячил. Вы знаете способ без ошибок прочитать заголовок xml-файл с кодировкой UTF16LE/UTF16BE?
Я понял. Вы имеете в виду что в стеке проверок сначала идет BOM, а потом интерпретация <?xml encoding="..." ?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467204
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЕсть всякие либы. Единственная проблема в том что для однобайтовых кодировок очень желательно знать язык файла.
русские и возможно латинские символы
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467225
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяBlazkowiczЕсть всякие либы. Единственная проблема в том что для однобайтовых кодировок очень желательно знать язык файла.
русские и возможно латинские символы
Давай порассуждаем откуда вообще в приложения приходят сведенья о кодировках.
1) Из http-header. Здесь как-бе все просто. Есть твой сервак. И ты сам решил что весь контент - например в utf-8

https://www.w3.org/International/articles/http-charset/index

2) Из настроек приложения. Тут как-бе тоже все ясно. Есть программный комплекс. Ты - его конфигуратор.
И решил что для предприятия и его документооборота будет юзаться отчетность и загрузки в формате *.txt с кодировкой 1251.
И НИИБЕТ. А все кто не согласны идут в сад. Или со слезами на глазах просят тебя-же оказать помощь в перекодировке

Тоже самое - настройки JDBC/OCI. Создал базячку в CL8WSWIN1251. Впиндюрил ее везде где только можно
у пользователях - и сиди себе пей чай.

3) Из операционки. Если ты почитатель Пингвина Тукса. То ты навреное создавал дохрена текстовых файлов
или конфигов прямо в консоли. При этом будет задействована базовая кодировка ОС которая прошита как
умолчательная (где-то). В системных параметрах или в пользовательских или в текущей консоли. Неважно.
Вобщем сел. Забил конфиг. И НИИБЕТ в чем. Главно дело что Пигвин ее 100% знает ибо родная.

4) И есть наверное алгоримы распознавания кодировок. Вангую что все создатели поисковых ботов
и краулеров и индексирующих серверов типа yandex, google, yahoo решали эту задачу.
Есть дохрена сайтов которые не отдают кодировку и некорректно сетят ее в <meta charset="...."
В лихие 2000-е я часто получал кракозябры в браузерах. Думаю вы - тоже.

Какие либы для детектирования - ХЗ. Надо искать.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467230
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ понял. Вы имеете в виду что в стеке проверок сначала идет BOM, а потом интерпретация <?xml encoding="..." ?BE/LE - это без маркера порядка байтов. С BOM не лучше, но без него - проблема нагляднее: нужно знать кодировку, чтобы прочитать какая кодировка используется.
Прикол с unzip.zip помните?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467250
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
если копнуть историю, то файлы с которыми придётся работать формируются программым обеспечением тех времен, когда слово браузер ещё знали только отдельные личности.
поэтому тут - как бы ну....
и как я сказал - с кодировкой разобрались - писать получается , в разных кодировках.
вопрос - как привести к одному знаменателю -набранное в редакторе и прочитанное, чтоб распарсить полученное при чтении из файла.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467260
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее надо выложить сюда файл... тогда всем будет ясно в чем вопрос...

кстати всем доброго!
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467261
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяи как я сказал - с кодировкой разобрались - писать получается , в разных кодировках.
вопрос - как привести к одному знаменателю -набранное в редакторе и прочитанное, чтоб распарсить полученное при чтении из файла.
А за это, мой дорогой друг мы и получаем деньги Я имею в виду синтез решений.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467276
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА за это, мой дорогой друг мы и получаем деньги Я имею в виду синтез решений.вот и хочется получать за рабочий код.
вот такая конструкция
t
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
ry (FileInputStream fin = new FileInputStream("xxxx.txt")) {
            byte[] buffer = new byte[fin.available()];
            fin.read(buffer, 0, fin.available());
            sss = new String(buffer, "cp866");
            System.out.println(" --------- " + sss.indexOf("ЛАЛАЛА"));
//            System.out.println(sss);
        } catch (IOException ex) {
            ex.printStackTrace();
        }

находит...
но вот это
Basil A. SidorovНеизвестно, т.к. String - базовый (и обязательный) тип Java SE API
как-то не понятно что получилось
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467281
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты можешь объяснить как работает этот фрагмент кода?

Код: java
1.
byte[] buffer = new byte[fin.available()];
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467287
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Код: plaintext
1.
2.
3.
4.
5.
6.
Returns an estimate of the number of remaining bytes that can be read (or skipped over) from this input 
stream without blocking by the next invocation of a method for this input stream. Returns 0 when the file position is 
beyond EOF. The next invocation might be the same thread or another thread. A single read or skip of this many bytes
 will not block, but may read or skip fewer bytes.
In some cases, a non-blocking read (or skip) may appear to be blocked when it is merely slow, for example when reading large files over slow networks.
Возвращает:
an estimate of the number of remaining bytes that can be read (or skipped over) from this input stream without blocking.
грубо - сколько надо памяти под файл
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467293
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя..... грубо - сколько надо памяти под файл
Вот это верно сказано. ГРУБО !
Правда желательно: грубо и матом.
Тогда толку будет больше
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467298
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, а в школе еще такой предмет как "информатика" остался?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467306
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, я не это хотел услышать.

Твой алгоритм (а это скорее всего твой) должен найти слово "ЛАЛАЛА" в текстовом файле. Верно?

Для того чтобы он корректно отработал. Мы должны гарантировать что fin.available() будет равно File.length()
иначе мы что-то упустим или разрежем эту фразу на две части и как следствие не получим позитивный
кейс даже в том случае когда ЛАЛАЛА действительно есть внутри файла.

Скажи пожалуйста ты тестировал этот код на реально больших файлах (десятки и сотни мегабайт)?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467313
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
ну не надо считаьб меня лохом.
конечно я знаю облать применения такого , и файлы в десятки и сотни метров он не готов тянуть.
есть реальные размеры файлов в единицы метров.
которые такой метод кушает без проблем.
на файле 1++мег я протестировал.
это не окончательное решение , есть вариант и построчного чтения,
и пока выбирается оптимальный вариант .
на данном этапе стоит(стоял) вопрос с кодировкой.
Leonid KudryavtsevИнтересно, а в школе еще такой предмет как "информатика" остался?
это к чему такие высказывания?
предлагаешь задавать размер наугад?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467315
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmayton,
ну не надо считаьб меня лохом.
конечно я знаю облать применения такого , и файлы в десятки и сотни метров он не готов тянуть.
есть реальные размеры файлов в единицы метров.
которые такой метод кушает без проблем.
на файле 1++мег я протестировал.
это не окончательное решение , есть вариант и построчного чтения,
и пока выбирается оптимальный вариант .
на данном этапе стоит(стоял) вопрос с кодировкой.
Я этого не говорил.

Тебе Блажкович дал коробочное решение 20544071 . Которое работает и проверено. Но ты зачем-то захотел
конвертить через байтовые массивы. Зачем?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467317
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМы должны гарантировать что fin.available() будет равно File.length()
это будет гарантировано. это не абстрактное чтение.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467320
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТебе Блажкович дал коробочное решение 20544071 . Которое работает и проверено. Но ты зачем-то захотел
конвертить через байтовые массивы. Зачем?
я не отказываюсь от его решения,
на данном этапе рашлся вопрос с кодировкой. оба варианта подошли.
оба находят, но оба не дают ответ на это
авторНеизвестно, т.к. String - базовый (и обязательный) тип Java SE API
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467332
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonТебе Блажкович дал коробочное решение 20544071 . Которое работает и проверено. Но ты зачем-то захотел
конвертить через байтовые массивы. Зачем?
я не отказываюсь от его решения,
на данном этапе рашлся вопрос с кодировкой. оба варианта подошли.
оба находят, но оба не дают ответ на это
авторНеизвестно, т.к. String - базовый (и обязательный) тип Java SE API
Смотри. Мы лезем в дебри. Я не совсем понял что он (Блажкович) имел в виду.
Возможно он хотел акцентировать на том что внутреннее представление
String в Java может быть и однобайтным для имен классов там или методов
но нам это не важно.

На презентационном уровне (тоесть на интерфейсе) String все методы
всегда будут работать так как это предписано. Тоесть String - это набор Char-s.

А каждый Char - это 16 битное целое или UTF-16 кодировка. И мы их будем ВИДЕТЬ и СРАВНИВАТЬ
и КОНКАТЕНИРОВАТЬ всегда как 16 битные целые. Это контракт. Это типо-безопасность.

Я отсылаю тебя к спецификации языка. The Java Language Specification. Java SE 8 Edition. .
Скачай. Почитай. Там описано все что тебе надо.

И последнее. Мы в этом споре очень сильно отклонились от темы.
Давай вернемся в русло твоего вопроса.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467354
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonString все методы
всегда будут работать так как это предписано. Тоесть String - это набор Char-s.

А каждый Char - это 16 битное целое или UTF-16 кодировка. И мы их будем ВИДЕТЬ и СРАВНИВАТЬ
и КОНКАТЕНИРОВАТЬ всегда как 16 битные целые. Это контракт. Это типо-безопасность.
вот это и есть самое интересное.
тогда и
String str="лалала";
будет преобразовано в набор Char-s. в не зависимости от того в чём написан код. Верно?
тогда это new String(buffer, "cp866") или это new String(buffer, "UTF-8") преобразует к одному ?
maytonЯ отсылаю тебя к спецификации языка. The Java Language Specification. Java SE 8 Edition. .
Скачай. Почитай. Там описано все что тебе надо.там слишком много, хотя и интересно...

maytonИ последнее. Мы в этом споре очень сильно отклонились от темы.
Давай вернемся в русло твоего вопроса.
да в общем, для меня вопрос разъяснился. и если тутошние два вопроса получат ответ да, то всё укладывается по полочкам.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467356
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяnew String(buffer, "cp866") или это new String(buffer, "UTF-8")
имеется в виду, что buffer в первом и во чтором случае прочитаны из соответствующих файлов
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467402
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадявадяnew String(buffer, "cp866") или это new String(buffer, "UTF-8")
имеется в виду, что buffer в первом и во чтором случае прочитаны из соответствующих файлов

Давай забудем про файлы. В нашем приближении просто есть байтовый массив.

Конструктор что ты вызвал вызывает другой конструктор.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public String(byte bytes[], String charsetName)
            throws UnsupportedEncodingException {
        this(bytes, 0, bytes.length, charsetName);
    }

public String(byte bytes[], int offset, int length, String charsetName)
            throws UnsupportedEncodingException {
        if (charsetName == null)
            throw new NullPointerException("charsetName");
        checkBounds(bytes, offset, length);
        this.value = StringCoding.decode(charsetName, bytes, offset, length);
    }



Дальше работает сложная логика StringCoding по поддержке интернационализации. Ее лучше смотреть отладчиком.

Вобщем посмотри сам. Весь ее смысл - обеспечить правильное преобразование из байтов в String(StringBuilder).
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39467911
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяну не надо считаьб меня лохомЧеловек, который использует для оценки размера файлов available() - именно он и есть.
И это не оскорбление, а оценка.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468016
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяоба находят, но оба не дают ответ на этоавторНеизвестно, т.к. String - базовый (и обязательный) тип Java SE APIЧитать надо первоисточники. В данном случае - The Unicode Consortium .
Если вкратце, то юникод представляет символы последовательностями "кодовых точек" (codepoints). Кодовые точки - это целые числа. И ничего более.
Размер кодовой точки ограничен двадцать одним битом. Отдельно подчеркну, что даже в базовой плоскости (первые 64К символов) есть составные. Даже в русском языке их два.

Юникодные символы кодировки не имеют, но вот кодовые точки - кодируются по разным схемам. Можно, например, упаковать триплеты кодовых точек в long - получится довольно компактное представление
Однако, если отбросить специализированную экзотику - остаётся два с половиной варианта: utf8, utf16 и utf32.

Вне зависимости от используемой схемы кодирования (термин "кодировка" не употребляется осознано), корректная реализация строковых операций будет достаточно занудной, т.к. необходимо учитывать массу ньюансов.
Ни у одной из схем кодирования нет принципиальных алгоритмических преимуществ, но у utf8 есть несколько очень практичных достоинств. Однако, исторических сложилось, что строки языка Java - char[]. В Java9 планируется перейти на byte[] + признак схемы кодирования, но пока процесс не завершён - обратную совместимость просто так не отбросишь, а пространство тестирования - весьма велико.

Следовательно, если мы не изобретаем велосипед, при изготовлении которого достаточно умные люди уже прошлись по разным граблям, то надо преобразовать входные последовательности байт в String, Character или "что-нибудь подходящее" из иерархии пакетов java.nio.

После преобразования байтов в юникодное представление вопрос кодировки не может возникать просто по определению.
Возникают вопросы (де)композиции, (де)нормализации, а также различные культурологические проблемы.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468098
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, написал много и познавательно, но к сожалению ни одного практического предложения.
единственно реальное это
Код: java
1.
2.
String text = FileUtils.readFileToString(file, "cp866");
FileUtils.writeStringToFile(anotherFile, "UTF-8");


но и то как работать с прочитанной строкой.
Basil A. SidorovЧеловек, который использует для оценки размера файлов available() - именно он и есть.
И это не оскорбление, а оценка.
делать такие выводы тоже не есть правильно не зная всего контекста задачи.
байка про слона и слепцов знакома?
не услышал ответа
если мне известна "кодировка" символов в файле(т.е. я знаю что hex 93 является числовывым представлением заглавной русской буквы У, что соответствует наименованию такой "кодировки" CP866), и я её прочитаю таким образом String text = FileUtils.readFileToString(file, "cp866");
и если я если я в любом редакторе наберу в файле .java строку "лалала" то я смогу однозначно найти в прочитанной строке набранную строку, если она там есть? т.е кодовое(бинарное) представленеи одинаковых символов буде совпадать?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468104
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovвадяоба находят, но оба не дают ответ на этопропущено...
Читать надо первоисточники. В данном случае - The Unicode Consortium .
Если вкратце, то юникод представляет символы последовательностями "кодовых точек" (codepoints). Кодовые точки - это целые числа. И ничего более.
Размер кодовой точки ограничен двадцать одним битом. Отдельно подчеркну, что даже в базовой плоскости (первые 64К символов) есть составные. Даже в русском языке их два.

Юникодные символы кодировки не имеют, но вот кодовые точки - кодируются по разным схемам. Можно, например, упаковать триплеты кодовых точек в long - получится довольно компактное представление
OMG! Опять кодовые точки :)
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468110
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяи если я если я в любом редакторе наберу в файле .java строку "лалала" то я смогу однозначно найти в прочитанной строке набранную строку, если она там есть? т.е кодовое(бинарное) представленеи одинаковых символов буде совпадать?
Что за бред? Что за "любой редактор"? Что за "лалала"? Кто такие "прочитанные" и "набранные" строки? Забыл ещё указать будет ли в этот момент идти за окном дождь. Тоже очень важный технический параметр.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468113
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадяи если я если я в любом редакторе наберу в файле .java строку "лалала" то я смогу однозначно найти в прочитанной строке набранную строку, если она там есть? т.е кодовое(бинарное) представленеи одинаковых символов буде совпадать?
Что за бред? Что за "любой редактор"? Что за "лалала"? Кто такие "прочитанные" и "набранные" строки? Забыл ещё указать будет ли в этот момент идти за окном дождь. Тоже очень важный технический параметр.
Я признаться тоже не понял вопрос Вади. И решил подождать уточняющих вопросов.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468131
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя...делать такие выводы тоже не есть правильно не зная всего контекста задачи.
байка про слона и слепцов знакома?
...
Да какой может быть "контекст задачи". Вы приводите кусок из документации на английском, и потом свою трактовку этого текста.

Это одно из двух:

1. Или чистое вредительство. Использовать НЕ-документированное поведение функций в реальном проекте.

2. Или у Вас был очень хороший учитель английского языка и английской литературы. Т.к., что бы перевести описание функции на английском:
"Returns an estimate of the number of remaining bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream...."
в русское "сколько надо памяти под файл"
это нужно иметь очень творческий подход. IMHO.

К сожалению, я английский знаю очень плохо. Т.ч. мне в полной мере красоту этого перевода не оценить. Единственные эпитеты, которые приходят в голову, только на русском матерном.

3. Совершенно не понятно, почему бы не использоваться документированный метод
File.length()

Мне, честно говоря, раньше никогда и в голову не приходило даже проверять как работает метод available или пользоваться им. Проверил, действительно, для файлов возвращает их размер. Только занафига пользоваться недокументированным поведением методов, когда есть документированные способ определить размер файла на диске.

Разумеется не думая о том, что кроме блочных устройств существуют(существовали) и символьные устройства. А там вообще понятия "размер файла" или "сколько надо памяти под файл" по определению нет.

maytonЯ признаться тоже не понял вопрос Вади. И решил подождать уточняющих вопросов.
Возможно Вадя беспокоится за кодировку исходного текста приложения.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468149
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЧто за "любой редактор"?
любой от блокнота до любимой ide, т.е сохранив файл в одной из поддерживаемой им кодировок.
тот же блокнот может сохранить и в анси, и утф, и юникоде.

BlazkowiczЧто за "лалала"?
String str="лалала";
BlazkowiczКто такие "прочитанные"
String text = FileUtils.readFileToString(file, "cp866");
Blazkowiczи "набранные" строки?
String str="лалала";

Leonid KudryavtsevДа какой может быть "контекст задачи". Вы приводите кусок из документации на английском, и потом свою трактовку этого текста.
а ты не думал что файл можно читать не с начала, а с любого места ? и надо знать не длину файла, а только то сколько осталось до конца?
Leonid KudryavtsevМне, честно говоря, раньше никогда и в голову не приходило даже проверять как работает метод available или пользоваться им.дак это говорит только о том , что тебе не всё приходилось делать, и есть не известные тебе стороны программирования.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468926
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяделать такие выводы тоже не есть правильно не зная всего контекста задачиТам, где available дайте корректную оценку размера файла - есть функция, которая возвращает точный размер файла.
Там где нет возможности узнать размер файла - available будет возвращать что угодно.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468941
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяи если я если я в любом редакторе наберу в файле .java строку "лалала" то я смогу однозначно найти в прочитанной строке набранную строку, если она там есть?Если не попытаетесь напаять компилятор, указывая некорректную кодировку файла - да, сможете.

Есть целые числа и их значения. Есть системы счисления - двоичная, десятичная, тридцатишестиричная и т.п.
И вот вы начинаете задалбывать окружающих вопросом: "У меня есть числа, записанные в разных системах счисления. Как я могу их сравнить?".
Вам начинают объяснять, что числа надо сравнивать как числа, предварительно считав их с указанием правильного основания системы счисления.

Но вы продолжаете задалбывать окружающих ...
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468948
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадялюбой от блокнота до любимой ide, т.е сохранив файл в одной из поддерживаемой им кодировок.
тот же блокнот может сохранить и в анси, и утф, и юникоде.

Так, а какое отношение сохранение в "любым редактором" в какой-либо кодировке имеет к поиску?

вадяString str="лалала";
А где гарантии что у тебя компилятор знает в какой кодировке ты сохранил java файл и сумеет правильно декодировать этот литерал?

вадяа ты не думал что файл можно читать не с начала, а с любого места ? и надо знать не длину файла, а только то сколько осталось до конца?

И то что до конца файла может остаться больше чем то что вернет available() тебя не касается, правда? David Connelly тоже никогда не думал что его GZIPInputStream кто-то вдруг захочет использовать по сети. И написали с дуру что available() == 0 это конец стрима. А люди теперь мучаются.

Leonid KudryavtsevМне, честно говоря, раньше никогда и в голову не приходило даже проверять как работает метод available или пользоваться им.
До появления NIO очень имело смысл при реализации неблокирующегося чтения по сети.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468950
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovТам, где available дайте корректную оценку размера файла - есть функция, которая возвращает точный размер файла.
Там где нет возможности узнать размер файла - available будет возвращать что угодно.
что вы придрались к куску кода , проадназначенному только для проверки, в данном случае он работает как надо. если я использую такое , то я знаю что должно быть а как.
Basil A. SidorovЕсть целые числа и их значения. Есть системы счисления - двоичная, десятичная, тридцатишестиричная и т.п.
И вот вы начинаете задалбывать окружающих вопросом: "У меня есть числа, записанные в разных системах счисления. Как я могу их сравнить?".
ты не можешь ответить и начинаешь флудить - никто не говорит про числа.
с какого хрена?
я уже разжевал вопрос , как ещё надо?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468955
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТак, а какое отношение сохранение в "любым редактором" в какой-либо кодировке имеет к поиску?
потому как один редактор может созранить в анси, другой в ютф.

BlazkowiczА где гарантии что у тебя компилятор знает в какой кодировке ты сохранил java файл и сумеет правильно декодировать этот литерал?
вот это меня и интересует.
BlazkowiczИ то что до конца файла может остаться больше чем то что вернет available() тебя не касается, правда?может быть что угодно. но если я знаю про файл всё - мне незачем городить огрод под все возможные случаи.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468960
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяты не можешь ответить и начинаешь флудить - никто не говорит про числа.
с какого хрена?
я уже разжевал вопрос , как ещё надо?Надо отложить вопросы в сторону по той простой причине, что пока вы не понимаете ответов.
А отложив вопросы надо сесть и собственными руками проверить все непонятные моменты.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468963
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczА где гарантии что у тебя компилятор знает в какой кодировке ты сохранил java файл и сумеет правильно декодировать этот литерал?те получается что
при использовании такого
String text = FileUtils.readFileToString(file, "cp866");
и для поиска в нем такого String str="лалала";
надо соблюдать какие-то ограничения?
файл java должен быти обязательно в кодировке utf8?
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468967
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovА отложив вопросы надо сесть и собственными руками проверить все непонятные моменты.если ты знаешь ответ - ответь, не знаешь - не надо советовать.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468972
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяфайл java должен быти обязательно в кодировке utf8?
Файл java должен совпадать с тем что будет использовать javac. Как вариант "лалала" можно закодировать через native2ascii
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39468989
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
спасибо за ответ,
вот более подробное http://citforum.ru/internet/javascript/java_rbint.shtml
правда давнишнее....
но суть объясняет.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39469031
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяString str="лалала";

Смотри. С точки зрения исходного кода. Компиллятор реагирует на параметр encoding:
Код: java
1.
$ javac -encoding windows-1251 ...  vadya.java


и это будет гарантией что javac будет интерпретировать байты vadya.java как симаволы в кодировке 1251.

При этом твоя среда разработки и твой блокнот и консоль должны быть НАСТРОЕНЫ на эту особенность.

Почти все современные среды разработки имеют конфиги для того чтобы настроить семантику текстового
файла исходника с точки зрения кодировки. JetBrains даже позволяет отдельно настраивать xml, java e.t.s.

Второй вариант. Ты хочешь иметь возможность быстро править код в ограниченных консолях (может это какой-то
нелокализованный HP-Unix) если использовать ASCII wrapped нотацию символьных констант.

National Symbol Ascii wrapped symbolл ла а
Тогда лалала будет выглядеть как-то так:

Код: java
1.
String lala = "лалала"



Аналогичный подход принят в .properties файлах которые изначально задумывались как строго ASCII без примеси
национального.

И есть много других способов работая с латиницей задавать национальные буквы абсолютно точно. Например
XML entities, где через амперсанд можно вбить любой код символа а браузер гарантирует точное отображение.

Но во всех этих нотациях и системах байт не равен символу. Что-бы ты не делал и какой алгоритм ты не кодил
ты выбираешь подход работать с символами char[], String, StringBuilder, Reader, BufferedReader и забываешь напрочь
про байты.

Или второй вариант - ты работаешь только с байтами (картинки, двоичные ресурсы e.t.c) и никаких символов
там нет и быть не может. Есть массивы целых числел от 0 до 255.

Разумеется ты не сможешь совсем абстрагироваться от внешних файлов но тут тебе в помошь текстовые ридеры
и конвертеры которое это давно. Надежно и проверенно. Прочитал. Получил поток символов. Отпарсил. И сохранил
обратно в файл не забыв указать кодировку.

Вот такая вот ботва.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39469062
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: java
1.
$ javac -encoding windows-1251 ...  vadya.java



maytonи это будет гарантией что javac будет интерпретировать байты vadya.java как симаволы в кодировке 1251.
и приведёт их к "внутреннему формату" ?
и это
Код: java
1.
String text = FileUtils.readFileToString(file, "cp866");


понимает что внешний файл в формате ср866 и приводит его к "внутреннему формату"?
если это так - то вопрос исчерпан.
во всём виноваты ide, делают что-то в тихушку...
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39469068
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это приведет их к нормальным Unicode-16 (char) символам.

Про "внутренний" я-бы сейчас вообще не говорил. Рано еще да и нет никаких предпосылок.
...
Рейтинг: 0 / 0
Про кодировку из cp866 в utf8
    #39469072
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто приведет их к нормальным Unicode-16 (char) символам.

Про "внутренний" я-бы сейчас вообще не говорил. Рано еще да и нет никаких предпосылок.
поэтому и взято в кавычки.
теперь всё понятно.
всем спасибо!!!
...
Рейтинг: 0 / 0
77 сообщений из 77, показаны все 4 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Про кодировку из cp866 в utf8
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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