我有一个包含瑞典字符å,ä,ö的java文件(我必须将这些字符包含在文件中,我正在解析ISO-8859-1,包含这些文件的latin1文本文件)。该文件在Windows计算机上编译并运行。
在bash中编译Ubuntu上的文件时,我遇到了以下错误:
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;
我尝试使用javac -encoding ISO-8859-1
标志,这会使文件编译,但不能按预期工作。我也尝试使用export LC_ALL=C
命令(我不知道为什么它会影响java编译,但是在其他线程中有人建议)但是它仍然不起作用。
任何提示都将不胜感激。
答案 0 :(得分:0)
编译错误提供了大部分必要信息:"编码ASCII"的不可映射字符。这意味着,编译器期望Java源文件以ASCII编码,而ASCII不包含这些字符。
您的源文件以某种方式包含瑞典语字符,可能编码为ISO-8859-1,可能是UTF-8(仅提及最可能的字符)。你必须找出你的源文件正在使用哪一个(这不是一个简单的任务)。
您的Ubuntu环境似乎使用ASCII作为默认编码。然后将源文件回显到终端可能会给你一个提示。如果您看到两个神秘字符的组合而不是瑞典字符,那么该文件可能是UTF-8编码。
你必须在Ubuntu上告诉编译器正确的编码。由于javac -encoding ISO-8859-1
没有按预期工作,我猜您的文件是以UTF-8编码的,因此javac -encoding UTF-8
可能是解决方案。
而不是乱码,你可以用\ uxxxx转义替换源文件中的字符。这将适用于ASCII,UTF-8,ISO-8859-1以及基于ASCII的所有其他编码。