powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Про кодировку из cp866 в utf8
25 сообщений из 77, страница 3 из 4
Про кодировку из 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
25 сообщений из 77, страница 3 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Про кодировку из cp866 в utf8
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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