|
|
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
maytonТебе Блажкович дал коробочное решение 20544071 . Которое работает и проверено. Но ты зачем-то захотел конвертить через байтовые массивы. Зачем? я не отказываюсь от его решения, на данном этапе рашлся вопрос с кодировкой. оба варианта подошли. оба находят, но оба не дают ответ на это авторНеизвестно, т.к. String - базовый (и обязательный) тип Java SE API ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 21:17 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадя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. . Скачай. Почитай. Там описано все что тебе надо. И последнее. Мы в этом споре очень сильно отклонились от темы. Давай вернемся в русло твоего вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 21:40 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
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И последнее. Мы в этом споре очень сильно отклонились от темы. Давай вернемся в русло твоего вопроса. да в общем, для меня вопрос разъяснился. и если тутошние два вопроса получат ответ да, то всё укладывается по полочкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 22:14 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадяnew String(buffer, "cp866") или это new String(buffer, "UTF-8") имеется в виду, что buffer в первом и во чтором случае прочитаны из соответствующих файлов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 22:16 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадявадяnew String(buffer, "cp866") или это new String(buffer, "UTF-8") имеется в виду, что buffer в первом и во чтором случае прочитаны из соответствующих файлов Давай забудем про файлы. В нашем приближении просто есть байтовый массив. Конструктор что ты вызвал вызывает другой конструктор. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Дальше работает сложная логика StringCoding по поддержке интернационализации. Ее лучше смотреть отладчиком. Вобщем посмотри сам. Весь ее смысл - обеспечить правильное преобразование из байтов в String(StringBuilder). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 23:45 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадяну не надо считаьб меня лохомЧеловек, который использует для оценки размера файлов available() - именно он и есть. И это не оскорбление, а оценка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 15:27 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадяоба находят, но оба не дают ответ на этоавторНеизвестно, т.к. String - базовый (и обязательный) тип Java SE APIЧитать надо первоисточники. В данном случае - The Unicode Consortium . Если вкратце, то юникод представляет символы последовательностями "кодовых точек" (codepoints). Кодовые точки - это целые числа. И ничего более. Размер кодовой точки ограничен двадцать одним битом. Отдельно подчеркну, что даже в базовой плоскости (первые 64К символов) есть составные. Даже в русском языке их два. Юникодные символы кодировки не имеют, но вот кодовые точки - кодируются по разным схемам. Можно, например, упаковать триплеты кодовых точек в long - получится довольно компактное представление Однако, если отбросить специализированную экзотику - остаётся два с половиной варианта: utf8, utf16 и utf32. Вне зависимости от используемой схемы кодирования (термин "кодировка" не употребляется осознано), корректная реализация строковых операций будет достаточно занудной, т.к. необходимо учитывать массу ньюансов. Ни у одной из схем кодирования нет принципиальных алгоритмических преимуществ, но у utf8 есть несколько очень практичных достоинств. Однако, исторических сложилось, что строки языка Java - char[]. В Java9 планируется перейти на byte[] + признак схемы кодирования, но пока процесс не завершён - обратную совместимость просто так не отбросишь, а пространство тестирования - весьма велико. Следовательно, если мы не изобретаем велосипед, при изготовлении которого достаточно умные люди уже прошлись по разным граблям, то надо преобразовать входные последовательности байт в String, Character или "что-нибудь подходящее" из иерархии пакетов java.nio. После преобразования байтов в юникодное представление вопрос кодировки не может возникать просто по определению. Возникают вопросы (де)композиции, (де)нормализации, а также различные культурологические проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 16:56 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, написал много и познавательно, но к сожалению ни одного практического предложения. единственно реальное это Код: java 1. 2. но и то как работать с прочитанной строкой. Basil A. SidorovЧеловек, который использует для оценки размера файлов available() - именно он и есть. И это не оскорбление, а оценка. делать такие выводы тоже не есть правильно не зная всего контекста задачи. байка про слона и слепцов знакома? не услышал ответа если мне известна "кодировка" символов в файле(т.е. я знаю что hex 93 является числовывым представлением заглавной русской буквы У, что соответствует наименованию такой "кодировки" CP866), и я её прочитаю таким образом String text = FileUtils.readFileToString(file, "cp866"); и если я если я в любом редакторе наберу в файле .java строку "лалала" то я смогу однозначно найти в прочитанной строке набранную строку, если она там есть? т.е кодовое(бинарное) представленеи одинаковых символов буде совпадать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 18:10 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovвадяоба находят, но оба не дают ответ на этопропущено... Читать надо первоисточники. В данном случае - The Unicode Consortium . Если вкратце, то юникод представляет символы последовательностями "кодовых точек" (codepoints). Кодовые точки - это целые числа. И ничего более. Размер кодовой точки ограничен двадцать одним битом. Отдельно подчеркну, что даже в базовой плоскости (первые 64К символов) есть составные. Даже в русском языке их два. Юникодные символы кодировки не имеют, но вот кодовые точки - кодируются по разным схемам. Можно, например, упаковать триплеты кодовых точек в long - получится довольно компактное представление OMG! Опять кодовые точки :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 18:18 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадяи если я если я в любом редакторе наберу в файле .java строку "лалала" то я смогу однозначно найти в прочитанной строке набранную строку, если она там есть? т.е кодовое(бинарное) представленеи одинаковых символов буде совпадать? Что за бред? Что за "любой редактор"? Что за "лалала"? Кто такие "прочитанные" и "набранные" строки? Забыл ещё указать будет ли в этот момент идти за окном дождь. Тоже очень важный технический параметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 18:26 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
Blazkowiczвадяи если я если я в любом редакторе наберу в файле .java строку "лалала" то я смогу однозначно найти в прочитанной строке набранную строку, если она там есть? т.е кодовое(бинарное) представленеи одинаковых символов буде совпадать? Что за бред? Что за "любой редактор"? Что за "лалала"? Кто такие "прочитанные" и "набранные" строки? Забыл ещё указать будет ли в этот момент идти за окном дождь. Тоже очень важный технический параметр. Я признаться тоже не понял вопрос Вади. И решил подождать уточняющих вопросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 18:29 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадя...делать такие выводы тоже не есть правильно не зная всего контекста задачи. байка про слона и слепцов знакома? ... Да какой может быть "контекст задачи". Вы приводите кусок из документации на английском, и потом свою трактовку этого текста. Это одно из двух: 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Я признаться тоже не понял вопрос Вади. И решил подождать уточняющих вопросов. Возможно Вадя беспокоится за кодировку исходного текста приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 18:50 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЧто за "любой редактор"? любой от блокнота до любимой ide, т.е сохранив файл в одной из поддерживаемой им кодировок. тот же блокнот может сохранить и в анси, и утф, и юникоде. BlazkowiczЧто за "лалала"? String str="лалала"; BlazkowiczКто такие "прочитанные" String text = FileUtils.readFileToString(file, "cp866"); Blazkowiczи "набранные" строки? String str="лалала"; Leonid KudryavtsevДа какой может быть "контекст задачи". Вы приводите кусок из документации на английском, и потом свою трактовку этого текста. а ты не думал что файл можно читать не с начала, а с любого места ? и надо знать не длину файла, а только то сколько осталось до конца? Leonid KudryavtsevМне, честно говоря, раньше никогда и в голову не приходило даже проверять как работает метод available или пользоваться им.дак это говорит только о том , что тебе не всё приходилось делать, и есть не известные тебе стороны программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 19:20 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадяделать такие выводы тоже не есть правильно не зная всего контекста задачиТам, где available дайте корректную оценку размера файла - есть функция, которая возвращает точный размер файла. Там где нет возможности узнать размер файла - available будет возвращать что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 17:33 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадяи если я если я в любом редакторе наберу в файле .java строку "лалала" то я смогу однозначно найти в прочитанной строке набранную строку, если она там есть?Если не попытаетесь напаять компилятор, указывая некорректную кодировку файла - да, сможете. Есть целые числа и их значения. Есть системы счисления - двоичная, десятичная, тридцатишестиричная и т.п. И вот вы начинаете задалбывать окружающих вопросом: "У меня есть числа, записанные в разных системах счисления. Как я могу их сравнить?". Вам начинают объяснять, что числа надо сравнивать как числа, предварительно считав их с указанием правильного основания системы счисления. Но вы продолжаете задалбывать окружающих ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 17:46 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадялюбой от блокнота до любимой ide, т.е сохранив файл в одной из поддерживаемой им кодировок. тот же блокнот может сохранить и в анси, и утф, и юникоде. Так, а какое отношение сохранение в "любым редактором" в какой-либо кодировке имеет к поиску? вадяString str="лалала"; А где гарантии что у тебя компилятор знает в какой кодировке ты сохранил java файл и сумеет правильно декодировать этот литерал? вадяа ты не думал что файл можно читать не с начала, а с любого места ? и надо знать не длину файла, а только то сколько осталось до конца? И то что до конца файла может остаться больше чем то что вернет available() тебя не касается, правда? David Connelly тоже никогда не думал что его GZIPInputStream кто-то вдруг захочет использовать по сети. И написали с дуру что available() == 0 это конец стрима. А люди теперь мучаются. Leonid KudryavtsevМне, честно говоря, раньше никогда и в голову не приходило даже проверять как работает метод available или пользоваться им. До появления NIO очень имело смысл при реализации неблокирующегося чтения по сети. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 18:00 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovТам, где available дайте корректную оценку размера файла - есть функция, которая возвращает точный размер файла. Там где нет возможности узнать размер файла - available будет возвращать что угодно. что вы придрались к куску кода , проадназначенному только для проверки, в данном случае он работает как надо. если я использую такое , то я знаю что должно быть а как. Basil A. SidorovЕсть целые числа и их значения. Есть системы счисления - двоичная, десятичная, тридцатишестиричная и т.п. И вот вы начинаете задалбывать окружающих вопросом: "У меня есть числа, записанные в разных системах счисления. Как я могу их сравнить?". ты не можешь ответить и начинаешь флудить - никто не говорит про числа. с какого хрена? я уже разжевал вопрос , как ещё надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 18:01 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТак, а какое отношение сохранение в "любым редактором" в какой-либо кодировке имеет к поиску? потому как один редактор может созранить в анси, другой в ютф. BlazkowiczА где гарантии что у тебя компилятор знает в какой кодировке ты сохранил java файл и сумеет правильно декодировать этот литерал? вот это меня и интересует. BlazkowiczИ то что до конца файла может остаться больше чем то что вернет available() тебя не касается, правда?может быть что угодно. но если я знаю про файл всё - мне незачем городить огрод под все возможные случаи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 18:07 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадяты не можешь ответить и начинаешь флудить - никто не говорит про числа. с какого хрена? я уже разжевал вопрос , как ещё надо?Надо отложить вопросы в сторону по той простой причине, что пока вы не понимаете ответов. А отложив вопросы надо сесть и собственными руками проверить все непонятные моменты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 18:14 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА где гарантии что у тебя компилятор знает в какой кодировке ты сохранил java файл и сумеет правильно декодировать этот литерал?те получается что при использовании такого String text = FileUtils.readFileToString(file, "cp866"); и для поиска в нем такого String str="лалала"; надо соблюдать какие-то ограничения? файл java должен быти обязательно в кодировке utf8? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 18:17 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovА отложив вопросы надо сесть и собственными руками проверить все непонятные моменты.если ты знаешь ответ - ответь, не знаешь - не надо советовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 18:19 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадяфайл java должен быти обязательно в кодировке utf8? Файл java должен совпадать с тем что будет использовать javac. Как вариант "лалала" можно закодировать через native2ascii ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 18:27 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо за ответ, вот более подробное http://citforum.ru/internet/javascript/java_rbint.shtml правда давнишнее.... но суть объясняет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 18:41 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
вадяString str="лалала"; Смотри. С точки зрения исходного кода. Компиллятор реагирует на параметр encoding: Код: java 1. и это будет гарантией что javac будет интерпретировать байты vadya.java как симаволы в кодировке 1251. При этом твоя среда разработки и твой блокнот и консоль должны быть НАСТРОЕНЫ на эту особенность. Почти все современные среды разработки имеют конфиги для того чтобы настроить семантику текстового файла исходника с точки зрения кодировки. JetBrains даже позволяет отдельно настраивать xml, java e.t.s. Второй вариант. Ты хочешь иметь возможность быстро править код в ограниченных консолях (может это какой-то нелокализованный HP-Unix) если использовать ASCII wrapped нотацию символьных констант. National Symbol Ascii wrapped symbolл ла а Тогда лалала будет выглядеть как-то так: Код: java 1. Аналогичный подход принят в .properties файлах которые изначально задумывались как строго ASCII без примеси национального. И есть много других способов работая с латиницей задавать национальные буквы абсолютно точно. Например XML entities, где через амперсанд можно вбить любой код символа а браузер гарантирует точное отображение. Но во всех этих нотациях и системах байт не равен символу. Что-бы ты не делал и какой алгоритм ты не кодил ты выбираешь подход работать с символами char[], String, StringBuilder, Reader, BufferedReader и забываешь напрочь про байты. Или второй вариант - ты работаешь только с байтами (картинки, двоичные ресурсы e.t.c) и никаких символов там нет и быть не может. Есть массивы целых числел от 0 до 255. Разумеется ты не сможешь совсем абстрагироваться от внешних файлов но тут тебе в помошь текстовые ридеры и конвертеры которое это давно. Надежно и проверенно. Прочитал. Получил поток символов. Отпарсил. И сохранил обратно в файл не забыв указать кодировку. Вот такая вот ботва. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 19:36 |
|
||
|
Про кодировку из cp866 в utf8
|
|||
|---|---|---|---|
|
#18+
mayton Код: java 1. maytonи это будет гарантией что javac будет интерпретировать байты vadya.java как симаволы в кодировке 1251. и приведёт их к "внутреннему формату" ? и это Код: java 1. понимает что внешний файл в формате ср866 и приводит его к "внутреннему формату"? если это так - то вопрос исчерпан. во всём виноваты ide, делают что-то в тихушку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 21:16 |
|
||
|
|

start [/forum/topic.php?fid=59&startmsg=39467320&tid=2122862]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 355ms |

| 0 / 0 |
