powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
19 сообщений из 19, страница 1 из 1
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522553
andrey7788
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую вас.

Ломаю голову.

Если я запускаю программу по кнопке "Запустить проект" - получаю один результат.
Если "Очистить и собрать проект" и потом собранный jar запускаю из dist - получаю другой результат.

Я генерирую QRCode xing-ом, передаю ему строку.

В програмее существуют две операци преобразования Cp1251 -> UTF-8 (при открыти файла) и поттом UTF-8 -> Cp1251.

Код: java
1.
2.
3.
BufferedReader br0 = new BufferedReader (
new InputStreamReader ( new FileInputStream ( "C://ecopdf//txt//out.txt" ), "Cp1251" ) );
line0 = br0.readLine ();




Код: java
1.
2.
3.
4.
5.
try {
myCodeText = new String(myCodeTextUtf.getBytes(), "Cp1251");
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(EPrint2017ui.class.getName()).log(Level.SEVERE, null, ex);
}



На второмшге UTF-8 -> Cp1251, в разных вариантах получаем разный результат. (во втором случае QRCode содержит UTF ный код)

Но меня устраивает только вариант по "Запустить проект". (я уже создал программу, и неожиданно в самом конце получил другой результат. QRCode мне нужен в Cp1251)

JDK в системе одна, другой отдельной jre нету. Win 7.
Проблема воспроизводиться на другом компьютере.

Чем объяснить разницу?
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522559
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Операции преобразования не нужны. Они выдают ваше непонимание кодировок.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522560
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey7788,

Метод String.getBytes() в качестве параметра использует кодировку. У вас откуда-то есть уверенность, что она UTF-8. Логируйте кодировку по-умолчанию и, возможно, обнаружите что гна отличается.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522618
andrey7788
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) На счёт не понимания кодировок в java я согласен. Я в java на ощупь пробираюсь. Этио первый проект который я сделал на java.

Я читал про кодировки "Вавилонское столпотворение" и полностью и потом частично. И про то, что java "все строки только utf"

И действительноя я что-то не осознаю.
Но как-то уж очень не просто в java с этим вопросом, раз такие статьи как "Вавилонское столпотворение" пишут. И эти мои проблемы тому подтверждение.

2) Моё не понимание кодировок не отменяет того, что нетбинс так себя ведёт. А это у меня главный вопрос. Так работает а так нет, это же проблема серьёзная. В хужшем случае мне придётся переписывать всё не на java, а не хочется, т.к. проект практически готов и уже эксплуатируется.

3) Я пробовал неуказывать кодировку при чтении файла и оотправлял xing-у но он выдавал ошибку, про то ,что какие-то символы не корректные.

4) тестируется всё на банкомате сбера, когда там не cp1251 он просто рисует вопросы вместо букв.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522628
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey77881) На счёт не понимания кодировок в java я согласен. Я в java на ощупь пробираюсь. Этио первый проект который я сделал на java.
А кодировки они к Java прямого отношения не имеют. В C++, Delphi и прочих - те же самые проблемы. Они, правда, их стараются иногда скрывать, но потом это выходит боком.

andrey7788Я читал про кодировки "Вавилонское столпотворение" и полностью и потом частично.
Какая-то известная книга, что вы её по названию?

andrey7788И про то, что java "все строки только utf"

Это ваше второе заблуждение, которе ещё больше вас путает. Java строка это текст. У него нет метода getCharset(). У строки нет кодировки.

andrey7788И действительноя я что-то не осознаю.

Есть очень простой факт, который надо понять. Даже два.
- У строки нет кодировки.
- Кодировка это то как строка (текст) представлены в виде набора байт.

Из чего следует, что кодировка вам нужна, только когда вы читаете текст снаружи (сеть, файл) или записываете туда.

andrey7788Но как-то уж очень не просто в java с этим вопросом, раз такие статьи как "Вавилонское столпотворение" пишут. И эти мои проблемы тому подтверждение.

На самом деле всё просто. Нужно только чтобы в голове что-то встало на место правильно и всё. И никакие статьи не нужны.

andrey77882) Моё не понимание кодировок не отменяет того, что нетбинс так себя ведёт.

Это не netbeans, это ваш код.

andrey7788А это у меня главный вопрос. Так работает а так нет, это же проблема серьёзная.
Даже если работает, то вы, возможно, просто не столкнулись ещё с проблемой. Потому что
Такой код
Код: java
1.
new String(String.getBytes())


Обозначает что вы уже сломали строку когда её получали. А теперь пытаетесь починить. Но такое преобразование валидно не для всех строк и не для всех кодировок.

andrey77883) Я пробовал неуказывать кодировку при чтении файла и оотправлял xing-у но он выдавал ошибку, про то ,что какие-то символы не корректные.
4) тестируется всё на банкомате сбера, когда там не cp1251 он просто рисует вопросы вместо букв.
Почему вы игнорируете моё замечание по поводу "кодировки по умолчанию"?
https://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html#defaultCharset()
Код: java
1.
System.getProperty("file.encoding")




Смотрите. У вас есть текстовый файл. Он уже записан в какой-то кодировке. Вам нужно его читать. Если вы указываете явно кодировку при чтении - вы должны её знать. Если вы явно не указываете её, то Java использует дефолтную. Если дефолтная вдруг совпала с вашим файлом, то вы получите хороший текст. А если не совпала, то возникают вопросы или "иероглифы", в зависимости от ситуации. Обычно "иероглифы". Ещё можно восстановить. Но лучше этого не делать. А ворпосы уже возникают после того как вы окончательно своей конвертацией ломаете ещё и иероглифы.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522668
andrey7788
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522679
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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Сколько байт кодируют один кирилический символ?
Откуда у вас байты в строке?
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522702
andrey7788
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Драгоценный Blazkowicz,
1) Если я сказал что там 1251 , там 1251. Я его сам выгрузил, и этот тестовый фйал не именяется. И я его перепроверил.

2) Вы сами пишите "Кодировка это то как строка (текст) представлены в виде набора байт.", а потом спрашиваете " Откуда у вас байты в строке?"



3) Но давайте дальше ... если я строки считал из фала верно.
Теперь я должен в виде cp1251 передать его xing-у как я должен это сделать?

Код: java
1.
myCodeText = new String(line0.getBytes(), "Cp1251");    



Есть какие-то другие варианты?




4) Далее QRCode:

Задали кодировку:
Код: java
1.
hintMap.put(EncodeHintType.CHARACTER_SET, "Cp1251");



Сгенерили:
Код: java
1.
bitMatrix byteMatrix = qrCodeWriter.encode(myCodeText, BarcodeFormat.QR_CODE, size, size, hintMap);



всё.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522710
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey7788,

Что то Вы совсем неправильно делаете.
В приаттаченном файле в qr зашифровано..."Во как я на русском пишу".
1.Кодировка тут UTF
И штрихсканер настроен на UTF
2.Чтобы мне создать QR на 1251
я должен своей либьой сказать в яве.
qr =qrliba.create(."Во как я на русском пишу".,1251);
pdf.add(qr);

Кодировку строк мучать не надо.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522711
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey7788Драгоценный Blazkowicz,
1) Если я сказал что там 1251 , там 1251. Я его сам выгрузил, и этот тестовый фйал не именяется. И я его перепроверил.

Вы так же написали про DOS, который cp866 для кириллицы. Я же не сам придумал.

andrey77882) Вы сами пишите "Кодировка это то как строка (текст) представлены в виде набора байт.", а потом спрашиваете " Откуда у вас байты в строке?"
Ну, вероятно, вам стоит перечитать это предложение ещё раз. Если вы его не понимаете. Если у вас строка не представлена в виде байт, то и кодировки у вас нет. Только строка.


andrey77883) Но давайте дальше ... если я строки считал из фала верно.
Теперь я должен в виде cp1251 передать его xing-у как я должен это сделать?
Код: java
1.
myCodeText = new String(line0.getBytes(), "Cp1251");    



Продолжаете писать ерунду. Я, ведь, указал выше. Что getBytes() использует текущую дефолтную кодировку. Которая зависит от того где ваша программа работает. То есть ваш код здесь делает следующее. Конвертирует строку в массив байт, используя, текущаю кодировку, которую вы не знаете. А потом собирает из этих байт новую строку, делая вид что эти байты cp1251.

Вы итоге, когда кодировки совпали, то этот код не делает ничего полезного вообще. Перегоняет в байты и обратно.
А если кодировки не совпали, то получается испорченная строка.

andrey7788Есть какие-то другие варианты?

Какое отношение new String(line0.getBytes(), "Cp1251"); имеет к xing остаётся загадкой.

andrey77884) Далее QRCode:

Задали кодировку:
Код: java
1.
hintMap.put(EncodeHintType.CHARACTER_SET, "Cp1251");



Сгенерили:
Код: java
1.
bitMatrix byteMatrix = qrCodeWriter.encode(myCodeText, BarcodeFormat.QR_CODE, size, size, hintMap);



всё.
Ну, хорошо. А клиент который будет этот QRCode читать, он знает что этот код в cp1251?
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522719
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, хорошо. А клиент который будет этот QRCode читать, он знает что этот код в cp1251?

Давайте я отвечу на этот вопрос ибо работаю с pos истемами.
Обычно сканера штрихкодов по умолчанию настроены либо на ansi английское либо UTF-8.
И в этом режиме прочитают в UTF хоть на китайском.
Если QR код в другой кодировке то сканер должен быть в другой кодировке.
Ксати, не все сканера QR поддерживают 1251(Просто нафига,когда есть utf).

Поэтому моя рекомендация, делать QR в UTF 8
И cканер скорее всего сразу прочтёт без перенастройки.
Ежели Т.У не позволяет то.
1.QR делаем либой с опцмей кодировки...если Ваша либа это не позволяет ситуация патовая.
2.Настраиваем сканер на 1251
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522723
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alПоэтому моя рекомендация, делать QR в UTF 8

Я тоже подозреваю что так оно и должно быть. Поэтому хинт про cp1251, скорее всего, лишний.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522735
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут больше,как я понял у человека...
Из под IDE работает,а отдельно нет...
Скорее всего IDE(из под IDE) запускается с каким то языковым ключом java -lang 1251...
и QR либа как-то это пользует...
А в обычном launchе этого ключа нет.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522773
andrey7788
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начинает доходить до меня.

System.getProperty("file.encoding") в нетбинсе возвращает "UTF-8".

А когда запускаю собранный jar то System.getProperty("file.encoding") возвращает "Сp1251".


Blazkowiczваш код здесь делает следующее. Конвертирует строку в массив байт, используя, текущаю кодировку, которую вы не знаете. А потом собирает из этих байт новую строку, делая вид что эти байты cp1251.



Исходя из того, что текущая кодировка System.getProperty("file.encoding") у меня "Сp1251" как мне передать xing-y строку в 1251?

(win1251 для QR прописана в договоре со сбербанком)
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522776
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey7788Исходя из того, что текущая кодировка System.getProperty("file.encoding") у меня "Сp1251"
как мне передать xing-y строку в 1251?
Обидно. Вот пишешь, пишешь. А тебя игнорируют. XING это Java API. Туда нельзя передать "строку в кодировке". Можно передать строку и всё. А кодировку вы используете два раза.
1. При чтении файла. Файл это байты в кодировке.
2. При выводе данных в QR Code. Сам QR Code это тоже байты в кодировке.

И то и другое у вас уже есть. Зачем вы пытаетесь добавить сюда третье - не понятно.

Нет у строк кодировок. Почему вы этот факт так упорно отбрасываете?
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522819
andrey7788
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
9153ЫсBlazkowicz,

Я проведу ещё тестирование и ближе к ночи отпишусь.

я не игнорирую ваши слва, я просто не понимаю.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522835
andrey7788
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я до этого пробовал сохранять исходник в 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" то в сбере кракозябры.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39522845
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey7788,

Кодировка происходит на нескольких этапах и сломаться она может на нескольких этапах. Вы же берёте начало и финальный результат, и способом перебора пытаетесь что-то сделать между этими этапами чтобы заработало.
Вам же нужно просто настроить логирование чтобы видеть на каком этапе что-то пошло не так.
...
Рейтинг: 0 / 0
Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
    #39526552
andrey7788
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, в качестве временной полумеры добавил переменную среды окружения JAVA_TOOL_OPTIONS с -Dfile.encoding=UTF8
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Разный результат работы программы в NetBeans по "Запустить проект" и "Очистить и собрать"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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