【问题标题】:Can't compile java-file on Ubuntu with special character å, ä, ö (works on windows)无法在 Ubuntu 上编译带有特殊字符 å、ä、ö 的 java 文件(适用于 Windows)
【发布时间】:2018-02-16 13:25:00
【问题描述】:

我有一个包含瑞典字符 å,ä,ö 的 java 文件(我必须将这些包含在文件中,我正在解析一个包含这些的 ISO-8859-1、latin1 文本文件)。该文件在 Windows 计算机上编译和运行。

在 Ubuntu 上用 bash 编译文件时,出现以下错误:

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 编译,但在其他线程中有建议)但它仍然不起作用。

任何提示将不胜感激。

【问题讨论】:

  • 编译器必须知道用于写入文件的字符编码。为了告诉它,您必须知道用于写入文件的字符编码以及如何告诉它。对于后者,请尝试javac -help 或等效项。

标签: java bash ubuntu encoding compilation


【解决方案1】:

编译错误提供了大部分必要信息:“用于编码 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 的编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多