Unmappable character for encoding - java

I'm trying to build my java project using ANT.
While running ant command i get the following error:
error: unmappable character for encoding Cp1252
I have also refrered to previous posts related to this same very query on here and as suggested added 'encoding' attribute to javac property as
<javac ..... encoding="UTF-8"> .... </javac>
which in turn gives me the following error:-
error: unmappable character for encoding UTF-8
I cannot make any changes to my code so i was hoping if there was any other solution to this.

Using a text editor like Notepad++, you can find out the encoding of the java code your are trying to compile, and pass the encoding to the ant compiler.
This thread maybe useful : Notepad++ can recognize encoding?

You need to define the encoding of your project sources, because likely contain both CP1252 and UTF-8 files, so you need to fix it. The error message should tell you the filename and the position where the illegal sequence occurred. You should then open the file with your usual editor (that hopefully stores the encoding somewhere) and transcode it to the target encoding.
In the case of the first error message consider that CP1252 is a fixed length, single byte encoding, and from this CP1252 table it seems only a few bytes don't represent any character:
0x81
0x8D
0x90
0x9D
You can open the file with a hex editor and identify the first occurrence of one of these bytes to help you guess the charset if it's neither CP1252 nor UTF8 and you absolutely can't figure out what it is.

Related

Can't compile java-file on Ubuntu with special character å, ä, ö (works on windows)

I've got a java-file containing the swedish characters å,ä,ö (I have to include these in the file, I'm parsing an ISO-8859-1, latin1 text-file which includes these). The file compiles and runs on a windows computer.
While compiling the file on Ubuntu in bash I am getting following error however:
ConstructDatabase.java:76: error: unmappable character for encoding ASCII
case '?': return 27;
^
ConstructDatabase.java:77: error: unmappable character for encoding ASCII
case '?': return 28;
^
ConstructDatabase.java:78: error: unmappable character for encoding ASCII
case '?': return 29;
I tried using the javac -encoding ISO-8859-1 flag, which makes the file compile, but not work as intended. I also tried using the export LC_ALL=C command (I'm not sure why it would affect the java compiling, but it was suggested in other threads) but it still doesn't work.
Any tips would be greatly appreciated.
The compile error gives most of the information necessary: "unmappable character for encoding ASCII". That means, the compiler expects the Java source files to be encoded in ASCII, and ASCII doesn't contain these characters.
Your source files somehow contain the swedish characters, maybe encoded as ISO-8859-1, maybe as UTF-8 (just to mention the most likely ones). You have to find out which one your source files are using (that's not a trvial task).
Your Ubuntu environment seems to be using ASCII as default encoding. Then echoing the source file to the terminal might give you a hint. If instead of the swedish character you see a combination of two cryptic characters, then the file might be UTF-8 encoded.
You have to tell the correct encoding to the compiler on Ubuntu. And as javac -encoding ISO-8859-1 doesn't work as expected, I'd guess that your files are encoded in UTF-8, so javac -encoding UTF-8 might be the solution.
And instead of messing around with the encodings, you can replace the characters in the source file with the \uxxxx escapes. That will work in ASCII, UTF-8, ISO-8859-1 and all other encodings based on ASCII.

ant build failed error: unmappable character for encoding UTF8

Have an ant build script which builds some java files. These files may have existed in a windows environment previously, though I am attempting to build and compile them on OSX. The file in question seems to be encoded with the following
u'Western (Windows 1252)'
The error I receive is
error: unmappable character for encoding UTF8
Does anyone have experience rectifying these types of issues?
Open the file with a text editor that allows good control over coding, such as Emacs, and save the file in UTF-8.

Eclipse wrong Java properties UTF-8 encoding

I have a JavaEE project, in which I use message properties files. The encoding of those file is set to UTF-8. In the file I use the german umlauts like ä, ö, ü. The problem is, sometimes those characters are replaced with unicode like \uFFFD\uFFFD, but not for every character. Now, I have a case where ä and ü are both replaced with \uFFFD\uFFFD, but not for every occurring of ä and ü.
The Git diff shows me something like this:
mail.adresses=E-Mail hinzufügen:
-mail.adresses.multiple=E-Mails durch Kommata getrennt hinzufügen.
+mail.adresses.multiple=E-Mails durch Kommata getrennt hinzuf\uFFFD\uFFFDgen.
mail.title=Einladungs-E-Mail
box.preview=Vorschau
box.share.text=Sie können jetzt die ausgewählten Bilder mit Ihren Freunden teilen.
## -6880,7 +6880,7 ## browser.cancel=Abbrechen
browser.selectImage=übernehmen
browser.starImage=merken
browser.removeImage=Löschen
-browser.searchForSimilarImages=ähnliche
+browser.searchForSimilarImages=\uFFFD\uFFFDhnliche
browser.clear_drop_box=löschen
Also, there are lines changed, which I have not touched. I don't understand why I get such a behavior. What could be the cause for the above problem?
My system:
Antergos / Arch Linux
System encoding UTF-8
Python 3.5.0 (default, Sep 20 2015, 11:28:25)
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
Eclipse Mars 1
Text file encoding UTF-8
Properties file encoding UTF-8
Tomcat 8
Java JDK 8
If I use another Editor like Atom to edit those message properties files, I don't ran into this problem.
I also realized in a case, if I copy the original value browser.searchForSimilarImages=ähnliche from Git diff and replace the wrong value browser.searchForSimilarImages=\uFFFD\uFFFDhnliche in Eclipse with that, then I have the correct umlauts in the message properties file.
Root cause:
By default ISO 8859-1 character encoding is used for Eclipse properties file (read here), so if the file contains any character beyond ISO 8859-1 then it will not be processed as expected.
Solution 1
If you use Eclipse then you will notice that it implicitly converts the special character into \uXXXX equivalent. Try copying
会意字 / 會意字
into a properties file opened in Eclipse.
EDIT: As per comment from OP
Update the encoding of your Eclipse as shown below. If you set encoding as UTF-32 then even you can see Chinese character, which you cannot see generally.
How to change Encoding of properties file in Eclipse: See this Eclipse Bugzilla bug for more details, which talks about several other possibilities and in the end suggest what I have highlighted below.
Chinese characters can be seen in Eclipse after encoding is set properly:
Solution 2
If above doesn't work consistently for you (it does work for me and I never see encoding issues) then try this using some Eclipse plugin which handles encoding of properties or other files. For example Eclipse ResourceBundle Editor or Extended Resource-Bundle editor
I would recommend using Eclipse ResourceBundle Editor.
Solution 3
Another possibility to change encoding of file is using Edit --> Set Encoding option. It really matters because it changes the default character set and file encoding. Play around with by changing encoding using Edit --> Set Encoding option and do following Java sysout System.out.println("Default Charset=" + Charset.defaultCharset()); and System.out.println(System.getProperty("file.encoding"));
As an aside: 1
Process the properties file to have content with ISO 8859-1 character encoding by using native2ascii - Native-to-ASCII Converter
What native2ascii does: It converts all the non-ISO 8859-1 character in their equivalent \uXXXX. This is a good tool because you need not to search the \uXXXX equivalent of special character.
Usage for UTF-8: native2ascii -encoding utf8 e:\a.txt e:\b.txt
As an aside: 2
Every computer program whether an IDE, application server, web server, browser, etc. understands only bits, so it need to know how to interpret the bits to make expected sense out of it because depending upon encoding used, same bits can represent different characters. And that's where "Encoding" comes into picture by giving a unique identifier to represent a character so that all computer programs, diverse OS etc. knows exact right way to interpret it.
So, if you have written into a file using some encoding scheme, lets say UTF-8, and then reading using any editor but running with encoding scheme as UTF-8 then you can expect to get correct display.
Please do read my this answer to get more details but from browser-server perspective.
Add the following arguments to your eclipse.ini file.
-Dclient.encoding.override=UTF-8
-Dfile.encoding=UTF-8
By default Eclipse uses the encoding format picked up by the Java Virtual Machine (JVM). Also, you can set the file encoding to utf-8.
Resolved by doing the below changes :
Modified below properties in eclipse.ini and close and start the eclipse applications
-Dclient.encoding.override=UTF-8
-Dfile.encoding=UTF-8
Set the encoding to the UTF-8 [Navigation path : Edit -> Set encoding]
Properties Files are expected to be ISO-8859-1 (Latin-1) encoded.
Most likely this what eclipse was set to by default as well.
You have to make sure that every tool which is run in the build or whatever disregards the spec and uses UTF-8 instead.
This looks like a mixture of Eclipse and git encoding or rather not-encoding.
Git uses raw bytes and doesn't care about encoding. Using git diff you might get characters like shown here. An example there is R<C3><BC>ckg<C3><A4>ngig # should be "Rückgängig".
As you can see there's two funny bracket things showing per umlaut. And in your editor, there are always two \uFFFD for each umlaut in the lines starting with +.
So I assume that your UTF-8 editor tries to interpret the git notation and fails. This in turn leads to the representation \uFFFD, which basically meands that this is character whose value is unknown or unrepresentable (see here).
Like suggested in the first link, you can try setting LESSCHARSET=UTF-8 in your environment variable (Windows). Hmm, in Linux it should be in etc/profile ?
see: a marker such as FFFD (REPLACEMENT CHARACTER) in http://unicode.org/faq/utf_bom.html
and see native2ascii --help
-encoding encoding_name
Specifies the name of the character encoding to be used by the conversion procedure. If this option is not present, then the
default character encoding (as determined by the java.nio.charset.Charset.defaultCharset method) is used. The encoding_name
string must be the name of a character encoding that is supported by the JRE. See Supported Encodings at
http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html
a case
$ file yourfile.properties
yourfile.properties : ISO-8859 text, with very long lines
$ native2ascii -encoding ISO-8859-1 yourfile.properties yourfile.properties

How do I configure Eclipse's Java compiler to give an error for a non-UTF-8 character?

I have a Java file with a non-UTF-8 character in one of the comments. I've changed the file's character encoding to be UTF-8, but I don't get a compile error on that line. Is it possible to configure Eclipse's Java compiler to give me a compile error when it sees a non-UTF-8 character in a Java file?

ant: warning: unmappable character for encoding UTF8

I have seen numerous of questions like mine but they don't answer my question because I'm using ant and I'm not using eclipse. I run this code: ant clean dist and it tells me numerous times that warning: unmappable character for encoding UTF8.
I see on the Java command that there is a -encoding option, but that doesn't help me cuz I'm using the ant.
I'm on Linux and I'm trying to run the developer version of Sentrick; I haven't made no modifications to anything, I just downloaded it and followed all their instructions and it ain't makes no difference. I emailed the developper and they told me it was this problem but I suspect that it is actually something that gotta do with this error at the end:
BUILD FAILED
/home/daniel/sentricksrc/sentrick/build.xml:22: The following error occurred while executing this line:
/home/daniel/sentricksrc/sentrick/ant/common-targets.xml:83: Test de.denkselbst.sentrick.tokeniser.components.DetectedAbbreviationAnnotatorTest failed
I'm not sure what I'm gonna do now because I really need for it to work
Try to change file encoding of your source files and set the Default Java File Encoding to UTF-8 also.
For Ant:
add -Dfile.encoding=UTF8 to your ANT_OPTS environment variable
Setting the Default Java File Encoding to UTF-8:
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8
Or you can start up java with an argument -Dfile.encoding=UTF8
The problem is not eclipse or ant. The problem is that you have a build file with special characters in it. Like smart quotes or m-dashes from MS Word. Anyway, you have characters in your XML file that are not part of the UTF-8 character set. So you should fix your XML to remove those invalid characters and replace them with similar looking but valid UTF-8 versions. Look for special characters like &#64 © — ® etc. and replace them with the (c) or whatever is useful to you.
BTW, the bad character is in common-targets.xml at line 83
Changing encoding to Cp 1252 worked for my project with same error. I tried changing eclipse properties several times but it did not help me in any way. I added encoding property to my pom.xml file and the error gone. http://ctrlaltsolve.blogspot.in/2015/11/encoding-properties-in-maven.html

Categories

Resources