|
|
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
Приветствую вас. Ломаю голову. Если я запускаю программу по кнопке "Запустить проект" - получаю один результат. Если "Очистить и собрать проект" и потом собранный jar запускаю из dist - получаю другой результат. Я генерирую QRCode xing-ом, передаю ему строку. В програмее существуют две операци преобразования Cp1251 -> UTF-8 (при открыти файла) и поттом UTF-8 -> Cp1251. Код: java 1. 2. 3. Код: java 1. 2. 3. 4. 5. На второмшге UTF-8 -> Cp1251, в разных вариантах получаем разный результат. (во втором случае QRCode содержит UTF ный код) Но меня устраивает только вариант по "Запустить проект". (я уже создал программу, и неожиданно в самом конце получил другой результат. QRCode мне нужен в Cp1251) JDK в системе одна, другой отдельной jre нету. Win 7. Проблема воспроизводиться на другом компьютере. Чем объяснить разницу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 03:08 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
Операции преобразования не нужны. Они выдают ваше непонимание кодировок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 06:31 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
andrey7788, Метод String.getBytes() в качестве параметра использует кодировку. У вас откуда-то есть уверенность, что она UTF-8. Логируйте кодировку по-умолчанию и, возможно, обнаружите что гна отличается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 06:35 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
1) На счёт не понимания кодировок в java я согласен. Я в java на ощупь пробираюсь. Этио первый проект который я сделал на java. Я читал про кодировки "Вавилонское столпотворение" и полностью и потом частично. И про то, что java "все строки только utf" И действительноя я что-то не осознаю. Но как-то уж очень не просто в java с этим вопросом, раз такие статьи как "Вавилонское столпотворение" пишут. И эти мои проблемы тому подтверждение. 2) Моё не понимание кодировок не отменяет того, что нетбинс так себя ведёт. А это у меня главный вопрос. Так работает а так нет, это же проблема серьёзная. В хужшем случае мне придётся переписывать всё не на java, а не хочется, т.к. проект практически готов и уже эксплуатируется. 3) Я пробовал неуказывать кодировку при чтении файла и оотправлял xing-у но он выдавал ошибку, про то ,что какие-то символы не корректные. 4) тестируется всё на банкомате сбера, когда там не cp1251 он просто рисует вопросы вместо букв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 10:20 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
andrey77881) На счёт не понимания кодировок в java я согласен. Я в java на ощупь пробираюсь. Этио первый проект который я сделал на java. А кодировки они к Java прямого отношения не имеют. В C++, Delphi и прочих - те же самые проблемы. Они, правда, их стараются иногда скрывать, но потом это выходит боком. andrey7788Я читал про кодировки "Вавилонское столпотворение" и полностью и потом частично. Какая-то известная книга, что вы её по названию? andrey7788И про то, что java "все строки только utf" Это ваше второе заблуждение, которе ещё больше вас путает. Java строка это текст. У него нет метода getCharset(). У строки нет кодировки. andrey7788И действительноя я что-то не осознаю. Есть очень простой факт, который надо понять. Даже два. - У строки нет кодировки. - Кодировка это то как строка (текст) представлены в виде набора байт. Из чего следует, что кодировка вам нужна, только когда вы читаете текст снаружи (сеть, файл) или записываете туда. andrey7788Но как-то уж очень не просто в java с этим вопросом, раз такие статьи как "Вавилонское столпотворение" пишут. И эти мои проблемы тому подтверждение. На самом деле всё просто. Нужно только чтобы в голове что-то встало на место правильно и всё. И никакие статьи не нужны. andrey77882) Моё не понимание кодировок не отменяет того, что нетбинс так себя ведёт. Это не netbeans, это ваш код. andrey7788А это у меня главный вопрос. Так работает а так нет, это же проблема серьёзная. Даже если работает, то вы, возможно, просто не столкнулись ещё с проблемой. Потому что Такой код Код: java 1. Обозначает что вы уже сломали строку когда её получали. А теперь пытаетесь починить. Но такое преобразование валидно не для всех строк и не для всех кодировок. andrey77883) Я пробовал неуказывать кодировку при чтении файла и оотправлял xing-у но он выдавал ошибку, про то ,что какие-то символы не корректные. 4) тестируется всё на банкомате сбера, когда там не cp1251 он просто рисует вопросы вместо букв. Почему вы игнорируете моё замечание по поводу "кодировки по умолчанию"? https://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html#defaultCharset() Код: java 1. Смотрите. У вас есть текстовый файл. Он уже записан в какой-то кодировке. Вам нужно его читать. Если вы указываете явно кодировку при чтении - вы должны её знать. Если вы явно не указываете её, то Java использует дефолтную. Если дефолтная вдруг совпала с вашим файлом, то вы получите хороший текст. А если не совпала, то возникают вопросы или "иероглифы", в зависимости от ситуации. Обычно "иероглифы". Ещё можно восстановить. Но лучше этого не делать. А ворпосы уже возникают после того как вы окончательно своей конвертацией ломаете ещё и иероглифы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 10:43 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПочему вы игнорируете моё замечание по поводу "кодировки по умолчанию"? System.getProperty("file.encoding") .... Если вы указываете явно кодировку при чтении - вы должны её знать. 1) Про существование System.getProperty("file.encoding") я ничего не знал до вашего сообщения. 2) Входная 1251 - это 100 %. т.к. текст выгружается из 1с 7.7 моей обработкой. А 7.7 1с может выгружать только DOS\win-1251 3) Поясните мне пожалуйста, при услови что текст в 1251, эта комменада она верная? new InputStreamReader ( new FileInputStream ( "C://ecopdf//txt//out.txt" ), "Cp1251" ) ); Дальше делаю: line0 = br0.readLine (); 4) Теперь у меня в line0 "набор байтов" , а какой? кирилица там в каком виде представлена? Сколько байт кодируют один кирилический символ? 1 байт (cp1251) или больше(utf)? Я думаю , что там utf. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 12:20 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
andrey77881) Про существование System.getProperty("file.encoding") я ничего не знал до вашего сообщения. Ну, да. Ведь искать "кодировку по-умолчанию" так сложно. Надо чтобы разжевали. andrey77882) Входная 1251 - это 100 %. т.к. текст выгружается из 1с 7.7 моей обработкой. А 7.7 1с может выгружать только DOS\win-1251 Что за DOS? Выходит иногда так может быть что там cp866. И потом опять непонятки. andrey77883) Поясните мне пожалуйста, при услови что текст в 1251, эта комменада она верная? new InputStreamReader ( new FileInputStream ( "C://ecopdf//txt//out.txt" ), "Cp1251" ) ); Это не команда. Это код. Он верный. Хорошо бы ещё BuffereReader или BufferedInputStream добавить. andrey77884) Теперь у меня в line0 "набор байтов" , а какой? Нет у вас там набора байтов с точки зрения прикладного программирования на Java. То как именно эта строка представлена в памяти вас волновать не должно. andrey7788кирилица там в каком виде представлена? "А" в вашей строке это "А" из кириллицы. На остальные буквы экстраполируете? andrey7788Сколько байт кодируют один кирилический символ? Откуда у вас байты в строке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 12:30 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
Драгоценный Blazkowicz, 1) Если я сказал что там 1251 , там 1251. Я его сам выгрузил, и этот тестовый фйал не именяется. И я его перепроверил. 2) Вы сами пишите "Кодировка это то как строка (текст) представлены в виде набора байт.", а потом спрашиваете " Откуда у вас байты в строке?" 3) Но давайте дальше ... если я строки считал из фала верно. Теперь я должен в виде cp1251 передать его xing-у как я должен это сделать? Код: java 1. Есть какие-то другие варианты? 4) Далее QRCode: Задали кодировку: Код: java 1. Сгенерили: Код: java 1. всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 13:13 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
andrey7788, Что то Вы совсем неправильно делаете. В приаттаченном файле в qr зашифровано..."Во как я на русском пишу". 1.Кодировка тут UTF И штрихсканер настроен на UTF 2.Чтобы мне создать QR на 1251 я должен своей либьой сказать в яве. qr =qrliba.create(."Во как я на русском пишу".,1251); pdf.add(qr); Кодировку строк мучать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 13:26 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
andrey7788Драгоценный Blazkowicz, 1) Если я сказал что там 1251 , там 1251. Я его сам выгрузил, и этот тестовый фйал не именяется. И я его перепроверил. Вы так же написали про DOS, который cp866 для кириллицы. Я же не сам придумал. andrey77882) Вы сами пишите "Кодировка это то как строка (текст) представлены в виде набора байт.", а потом спрашиваете " Откуда у вас байты в строке?" Ну, вероятно, вам стоит перечитать это предложение ещё раз. Если вы его не понимаете. Если у вас строка не представлена в виде байт, то и кодировки у вас нет. Только строка. andrey77883) Но давайте дальше ... если я строки считал из фала верно. Теперь я должен в виде cp1251 передать его xing-у как я должен это сделать? Код: java 1. Продолжаете писать ерунду. Я, ведь, указал выше. Что getBytes() использует текущую дефолтную кодировку. Которая зависит от того где ваша программа работает. То есть ваш код здесь делает следующее. Конвертирует строку в массив байт, используя, текущаю кодировку, которую вы не знаете. А потом собирает из этих байт новую строку, делая вид что эти байты cp1251. Вы итоге, когда кодировки совпали, то этот код не делает ничего полезного вообще. Перегоняет в байты и обратно. А если кодировки не совпали, то получается испорченная строка. andrey7788Есть какие-то другие варианты? Какое отношение new String(line0.getBytes(), "Cp1251"); имеет к xing остаётся загадкой. andrey77884) Далее QRCode: Задали кодировку: Код: java 1. Сгенерили: Код: java 1. всё. Ну, хорошо. А клиент который будет этот QRCode читать, он знает что этот код в cp1251? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 13:26 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
Ну, хорошо. А клиент который будет этот QRCode читать, он знает что этот код в cp1251? Давайте я отвечу на этот вопрос ибо работаю с pos истемами. Обычно сканера штрихкодов по умолчанию настроены либо на ansi английское либо UTF-8. И в этом режиме прочитают в UTF хоть на китайском. Если QR код в другой кодировке то сканер должен быть в другой кодировке. Ксати, не все сканера QR поддерживают 1251(Просто нафига,когда есть utf). Поэтому моя рекомендация, делать QR в UTF 8 И cканер скорее всего сразу прочтёт без перенастройки. Ежели Т.У не позволяет то. 1.QR делаем либой с опцмей кодировки...если Ваша либа это не позволяет ситуация патовая. 2.Настраиваем сканер на 1251 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 13:35 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
irbis_alПоэтому моя рекомендация, делать QR в UTF 8 Я тоже подозреваю что так оно и должно быть. Поэтому хинт про cp1251, скорее всего, лишний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 13:48 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
Тут больше,как я понял у человека... Из под IDE работает,а отдельно нет... Скорее всего IDE(из под IDE) запускается с каким то языковым ключом java -lang 1251... и QR либа как-то это пользует... А в обычном launchе этого ключа нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 14:08 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
Начинает доходить до меня. System.getProperty("file.encoding") в нетбинсе возвращает "UTF-8". А когда запускаю собранный jar то System.getProperty("file.encoding") возвращает "Сp1251". Blazkowiczваш код здесь делает следующее. Конвертирует строку в массив байт, используя, текущаю кодировку, которую вы не знаете. А потом собирает из этих байт новую строку, делая вид что эти байты cp1251. Исходя из того, что текущая кодировка System.getProperty("file.encoding") у меня "Сp1251" как мне передать xing-y строку в 1251? (win1251 для QR прописана в договоре со сбербанком) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 14:57 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
andrey7788Исходя из того, что текущая кодировка System.getProperty("file.encoding") у меня "Сp1251" как мне передать xing-y строку в 1251? Обидно. Вот пишешь, пишешь. А тебя игнорируют. XING это Java API. Туда нельзя передать "строку в кодировке". Можно передать строку и всё. А кодировку вы используете два раза. 1. При чтении файла. Файл это байты в кодировке. 2. При выводе данных в QR Code. Сам QR Code это тоже байты в кодировке. И то и другое у вас уже есть. Зачем вы пытаетесь добавить сюда третье - не понятно. Нет у строк кодировок. Почему вы этот факт так упорно отбрасываете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 15:02 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
9153ЫсBlazkowicz, Я проведу ещё тестирование и ближе к ночи отпишусь. я не игнорирую ваши слва, я просто не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 15:53 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
Я до этого пробовал сохранять исходник в 1251, задавал в тексте строку, передавал xing-у .. и он генерировал то что мне надо в 1251. И именно по этому я хотел передать строку xing-y в 1251. Я знаю, что так всё работает. Если я считываю строки из файла, то более мене приличного результата я добился только когда преобразолвание myCodeText = new String(myCodeTextUtf.getBytes(), "Cp1251"); и запускаю в нетбинсе что бы System.getProperty("file.encoding") была "UTF-8". В сбере читается, но с телефона кракозябры. Если убрать строку myCodeText = new String(myCodeTextUtf.getBytes(), "Cp1251"); и запускать jar что бы System.getProperty("file.encoding") = "Cp1251" то в сбере кракозябры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 16:34 |
|
||
|
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
|
|||
|---|---|---|---|
|
#18+
andrey7788, Кодировка происходит на нескольких этапах и сломаться она может на нескольких этапах. Вы же берёте начало и финальный результат, и способом перебора пытаетесь что-то сделать между этими этапами чтобы заработало. Вам же нужно просто настроить логирование чтобы видеть на каком этапе что-то пошло не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 16:44 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39522560&tid=2122570]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
136ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 464ms |

| 0 / 0 |
