Open 6PATyCb opened 11 months ago
strange, I can't remember any recent changes which could cause this. Was NetBeans running on the same JDK version for both screenshots?
this works for me on linux:
public class Mavenproject1 {
public static void main(String[] args) {
System.out.println(Runtime.version());
System.out.println("кава");
}
}
->
adding the windows label for now
This sounds like the difference between running on JDK 17 and JDK 21 (well, 18+) to me. See #4771 and #4396 . Does setting the output encoding in the project or global Java settings help?
yeah that is why I asked about the JDK version. If it would be JDK 17 in both cases (as the issue says) it might be a new issue, otherwise it is the well known one you linked above.
Nb21 Nb20
OK, that somewhat rules out the issues linked to.
Can you try copying the launchers from NB20 into NB21? eg. bin/netbeans.exe
and bin/netbeans64.exe
.
I'm curious if some changes in the launcher code are causing this - eg. https://github.com/apache/netbeans-native-launchers/pull/7
Nb21 works fine after replace
Thanks for the confirmation. I'm curious if the released launchers for NB 21 work OK when running on JDK 21? I'm also curious if adding -J-Dstdout.encoding=UTF-8
in the default options in netbeans.conf
will get the released launchers to work for you on JDK 17?
It does not help. The issue is back
@6PATyCb It's interesting that this causes Tofu characters ⍰ (square boxes) instead of question marks (?). I can reproduce this when I intentionally mismatch the project's output encoding (which on JDK17 and lower is the same as the native encoding) and the one in Netbeans (which when run on JDK17 should also be the native encoding).
E.g. launching the Project with no-args on a West European locale with JDK 17 (output encoding=cp1252
) and Netbeans 21 with (-Dstdout.encoding=utf-8
)
Could you try the following?
Execute the following statements inside your project
System.out.println("Пример✨️");
System.out.println(Runtime.version());
System.out.println("Charset.defaultCharset(): " + Charset.defaultCharset());
System.out.println("file.encoding property:" + System.getProperty("file.encoding"));
System.out.println("native.encoding property:" + System.getProperty("native.encoding"));
System.out.println("sun.jnu.encoding property:" + System.getProperty("sun.jnu.encoding"));
System.out.println("stdout.encoding property:" + System.getProperty("stdout.encoding"));
System.out.println("sun.stdout.encoding property:" + System.getProperty("sun.stdout.encoding"));
if (System.console() != null) {
System.out.println("systemConsole encoding: " + System.console().charset());
}
And then set -J-Dsun.stdout.encoding=...
, -J-Dstdout.encoding=...
and -J-Dfile.encoding=...
to the output of the value of sun.jnu.encoding
from the code block above.
Does this also solve your problem when using Netbeans 21 with JDK17 and the new launcher?
Another thing that would be interesting: When doing the above, does it change anything when you explicitly set a font under Tools>Options>Miscellaneous>Output>The '...' button next to the 'Font'
that does support Cyrillic like Courier New
?
So, let try (Nb21, no changes in netbeans.conf):
looks better after the changes:
return to default: trying to change the font: with changes in netbeans.conf:
@6PATyCb Thanks for testing. This proves that this is not a font or fontconfig.properties
(You can configure the font fallbacks for differing encodings there individually) problem.
The problem is that the output encoding of Netbeans does not match the output encoding of the Java project when running everything (Java and Netbeans) with the default output encoding. For Windows the default Java output encoding is always the native codepage.
I can now reproduce this problem with the new launchers. It seems to make a difference whether you start bin/netbeans.exe
or bin/netbeans64.exe
.
netbeans.exe
with everything on defaultWhen I start bin/netbeans.exe
everything works correctly for me. The project's output encoding is cp1252
and Netbeans output encoding also seems to be cp1252
Netbeans shows Cp1252
in the about window and matches the Project's shown encoding Cp1252
resulting in the expected abcÄÖ✨️,Пример
=> abcÄÖ??,??????
where all characters not present in Cp1252 are turned into question marks.
netbeans64.exe
with everything on defaultWhen I start bin/netbeans64.exe
the output encodings become mismatched. The project's output encoding is cp1252
and Netbeans' output encoding seems to be utf-8
Netbeans shows UTF-8
in the about window and does not match the Project's shown encoding Cp1252
resulting in the unexpected abcÄÖ✨️,Пример
=> abc⍰⍰??,??????
where all characters not present in Cp1252 are turned into question marks and all characters differently encoded from unicode but present in Cp1252 turn into Tofu characters.
The reporter in #7098 seemed to have the same issue. For now the best fix is to specify the encoding both on the project and inside etc/netbeans.conf
to workaround those mismatches consistently.
For this I would recommend to set everything to UTF-8 as this has the added benefit of not being limited to one codepage.
The project's encoding can be set explicitly to UTF-8 with the JVM options -Dfile.encoding=utf-8
and -Dstdout.encoding=utf-8
to make the project use UTF-8 everywhere.
Luckily we can also set the Netbeans output encoding explicitly with with the -J-Dstdout.encoding=utf-8
and -J-Dfile.encoding=utf-8
options inside etc/netbeans.conf
so that everything works all the time.
Adding both file.encoding
and stdout.encoding
makes this work consistently with Java 21 as well.
This yields the expected abcÄÖ✨️,Пример
because both Netbeans' and the Project's output encoding is set to utf-8
Note: On Java 21 the 'about' dialogue is not of much help to determine the output encoding of Netbeans because it seems to display file.encoding
which on JDK 21 is UTF-8
by default whereas stdout.encoding
is still the native encoding e.g. win1252
@duoduobingbing Thanks to reply. When I set file.encoding
and stdout.encoding
as UTF-8
both on the project and inside etc/netbeans.conf
everything works fine except when Run File
used:
Apache NetBeans version
Apache NetBeans 21
What happened
The issue happens in all my Java Maven projects when I try to output cyrillic to the console.
Language / Project Type / NetBeans Component
Java maven project
How to reproduce
Hello! Just create new project and send to log cyrrilic symbols. Look at screens: Nb20: Nb21: springboot tomcat
Did this work correctly in an earlier version?
Apache NetBeans 20
Operating System
Windows 11
JDK
Liberica JDK 17x64
Apache NetBeans packaging
Apache NetBeans provided installer
Anything else
No response
Are you willing to submit a pull request?
No