无法使用特殊字符å,ä,ö在Ubuntu上编译java文件(适用于Windows)

时间:2017-09-07 18:02:07

标签: java bash ubuntu encoding compilation

我有一个包含瑞典字符å,ä,ö的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编译,但是在其他线程中有人建议)但是它仍然不起作用。

任何提示都将不胜感激。

1 个答案:

答案 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的所有其他编码。