Java Swing does not display Unicode character - java

I am working on a Java Swing project and I would like to add a "play/pause" button.
I looked for its Unicode symbol, and got its Java representation which is \u23EF.
So I tried the following:
JButton button = new JButton("\u23EF");
The problem is that the button is blank, the character is not displayed.
In theory, Java with Swing should be able to display Unicode characters exactly like this and without the help of any conversion or anything. I did some research and haven't found any solution.
Why isn't my program behaving correctly? Is it simply a UI problem or did is my code missing something?

Be sure that your font support this unicode symbol and declare it like :
Font font = new Font("HereIsTheNameOfYourFont", Font.PLAIN, 24);
Then initialize the button
JButton button = new JButton("\u23EF");
Finally set the font to button
button.setFont(font);
Ok, you are ready to add it to your JFrame then.

you need to change the encoding of your java project. if you are using eclipse IDE then you can write click on project folder and go to properties and in resource section find the Text file encoding and here you have to change it to UTF-8:
change to this:
System.out.println('\u23EF');
output: ⏯
if you are trying to run your file from cmd:
then this link will be helpful for you:
Setting the default Java character encoding
java -Dfile.encoding=UTF-8 … com.x.Main
you can change the encoding of workspaces in eclipse:
change workspace files encoding
and if you are using IntelliJ IDE then follow this link:
configuring-individual-file-encoding

Related

getting square emoticons instead of actual emoticons

I am working a java chat application and I am adding emoticons by replacing the emoticon shortcut, like :) ,with ◕‿◕ . Its not an image that I am replacing it with but simple text. Now the problem that I am facing is that sometimes I get just Square boxes instead of the actual thing that I want. I am making these images/texts in MS Word by converting the unicode to the actual image. I am also using various online resources to get these images/text.
Can anyone tell me how to get rid of the boxes and get the actual text.
My encoding is in UTF-8 and my font is also set to monospaced.
Your unicode-character is probably not supported by your font. Either the font implements the character as a box, or the operating system / font-renderer draws a box instead of the glyph.
I would say the Font used in your application just cannot show some chars. Find one which font really can and use it there.
Font has boolean canDisplay(char c) method which you can use.
See also the doc about font

How to use Character.UnicodeBlock while I set some strings in a JEditorpane

I need to display some Bengali characters. I've tried to set the font to a Bengali Unicode font but It does not work properly. The last hope to fulfill my project is to use Character.UnicodeBlock. But I do not have any idea about it. Is it really possible to get the actual display of any Unicode character in Java? How can I use Character.UnicodeBlock in a component?
I assume Java 7.
First one needs a Unicode font.
If this font goes into the Windows fonts, and there is no name clash with an already existing font, everything should work.
Otherwise one might store the font as resource file in the application:
InputStream fontIn = getClass().getResourceAsStream("/.../... .ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, file);
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(font);
After this jEditorPane.setFont(font) should work. Mind, the text in the JEditorPane should not be HTML, where own fonts might be set.
It is tricky, because of font substitution, on font decoding using names.
Another problem might be hard-coded strings in the java source: the encoding of the java source (the editor) must be the same as is used by the javac compiler. For international projects best both UTF-8 (javac -encoding=UTF-8 ...). To test whether there is a problem with that one can test with "\u099C" for জ.

Eclipse console printing words incorrectly

I was doing some pdf text extractions.
I have attached screenshot of a scenario where i faced the problem.
Why the eclipse console failed to print the word "specification"?
Instead it is printed as "speci?cation".
I can see the characters overlapped.
But during debugging the code, the same text is shown without a "question mark".
Is there any way to print the same text to the console?
Please help.
The problem is the "fi" ligature ("overlapping letters") that is a single character in Unicode. In the debugging view the Windows methods for drawing text are used; these know about Unicode and can render the ligature correctly.
The console view uses a certain encoding. When used with Windows the default is "cp1252", Codepage 1252, or ISO 8859. These encodings do not know this specific letter and cannot print it, so the question mark is used as substitute.
You can set the encoding for Eclipse in general via Window > Preferences, General > Workspace, Text file encoding. While I think it is a good idea to use UTF-8 everywhere it may lead to problems with existing files.
You can set the encoding per project in the project properties, category Resource.
If you just want to set the encoding for the console view, the least immersive solution, it is not exactly intuitive. The console view encoding is a property of the runtime configuration you use for running your project. Run > Run Configurations..., your run configuration, Common.
When you use one of these methods to set the encoding to UTF-8 then the ligature will be printed correctly to the console view.
Of course the more general settings only have effect if not overwritten by more specific ones (Workspace, Project, Run Configuration).
I'm surely getting all the terminology wrong here, but the PDF is probably using a glyph for the "fi" combination that isn't part of the ASCII character set. Thus it renders in the console as "?". Notice in the middle part of the window that the "i" in "fi" is closer to the "f" than it would be if it were the ASCII sequence "f" followed by "i" and that the "i" is also missing the dot.

Is it safe to use Unicode characters in Java GUI?

For a play button in a Java GUI I currently use a button with the label set to ' ▻ ' (found this symbol in a Unicode symbol table). As I understand, it is better to not use such symbols directly in source code but rather use the explicit unicode representation like \u25BB in this example, because some tools (editor, ...) might not be able to handle files with non-ASCII content (is that correct?).
Assuming the compiled class contains the correct character, under which circumstances would the GUI not show the intended symbol on a current PC operating system? Linux, Windows, Mac should all support UTF-16, right? Do available fonts or font settings cause problems to this approach?
(Of course I could add an icon, but why add extra resources if a symbol should already be available... given that this is a portable solution)
Do available fonts or font settings cause problems to this approach?
Unfortunately they do. You can use unicode in the source code of course, but the problem is that currently unicode has 246,943 code points assigned so obviously no font has even a fraction of those defined. You'll get squares or some other weird rendering when the glyph isn't available. I've had cases where relatively simple symbols such as ³ render fine on one Windows computer and show up as squares in the next, almost identical computer. All sort of language and locale settings and minor version changes affect this, so it's quite fragile.
AFAIK there are few, if any, characters guaranteed to be always available. Java's Font class has some methods such as canDisplay and canDisplayUpTo, which can be useful to check this at runtime.
Instead of using icons, you could bundle some good TrueType font that has the special characters you need, and then use that font everywhere in your app.
I currently use a button with the label set to ' ▻ '
rather than I always use JButton(String text, Icon icon), and Icon doesn't matter if is there this Font or another Font, UTF-16 or Unicode
Most of editors have support for unicode, so go on.
Look at this post: Eclipse French support
If you are using simple editor like notepad then when you save type name and below it choose UTF encoding ( http://www.sevenforums.com/software/72727-how-make-notepad-save-txt-files-unicode.html )

How to *easily* display Korean characters in a Java program

I'd like to do this:
System.out.println("안녕하세요!");
But I get a "Some characters could not be encoded using the MacRoman character encoding" popup error message when I try to compile in Eclipse. I'm running Mac OS X. Is there a way to get around that?
So, I guess I'll try using Unicode:
System.out.println((char)0xD0A4);
Which I'd like to print out '키', but instead get a '?'. I guess the command line doesn't support Unicode. But even if it did, it'd be really annoying to have to go to one of several charts (like this one) to find each character block.
Anyway, FINE! So I'll use a JLabel...
JLabel lbl = new
JLabel(""+(char)0xD0A4);
Awesome, this prints out 키! ... but I still have to look up the Unicode characters for each block. How can I easily spew out Korean characters in a program?
Switch to UTF-8, as said before.
However, instead of doing it on a per-project basis (as J-16) suggests, go through
Window -> Preferences -> General -> Workspace and change the "Text file encoding" to "Other: UTF-8".
This changes the setting for the entire workspace.
Afterwards, you can input your characters as you are used to.
The Eclipse console doesn't use unicode encoding so it can't display those. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=13865.
Try the fix mentioned here: http://paranoid-engineering.blogspot.com/2008/05/getting-unicode-output-in-eclipse.html
Just right click the file in the project view, choose properties. Change the encoding to UTF8 there.

Categories