Java - 编译使用geany \ u0000创建的程序时出现非法字符错误

时间:2017-10-28 11:36:56

标签: java geany

我一直在使用geany创建java程序,直到现在我才能成功编译它们。下面在java中创建的简单程序是使用geany创建的,但是发生了非法的charcter错误(\ u0000)。

public class SumOfCubedDigits
{
    public static void main(String[] args)
    {
        for (int i=1; i<=9; i++)
        {
            for (int j=0; j<=9; j++)
            {
                for (int k=0; k<=9; k++)
                {
                    double iCubed=Math.pow(i,3);
                    double jCubed=Math.pow(j,3);
                    double kCubed=Math.pow(k,3);
                    double cubedDigits = iCubed + jCubed + kCubed;
                    int concatenatedDigits = (i*100 + j*10 + k);
                    if (cubedDigits==concatenatedDigits)
                    {
                        System.out.println(concatenatedDigits);
                    }
                }
            }
        }
    }
}

我用nano重新创建了程序,它能够成功编译。然后我将它以不同的SumTest.java名称复制到geany,编译它并得到相同的非法字符错误。显然,错误在于geany IDE for raspberry pi。我想知道如何修复编辑器以成功创建和编译程序,因为它不仅仅是这个程序,它是使用geany在java中创建的任何程序。

2 个答案:

答案 0 :(得分:1)

这可能是Geany在保存源文件时使用的编码问题。

如果使用javac编译文件而未指定-encoding参数,则使用平台的默认编码。在现代Linux上,这很可能是UTF-8;在Windows上,我认为它是ANSI字符集之一或UTF-16。

要找出默认编码是什么,您可以编译并运行一个小型java程序:

public class DefaultCharsetPrinter {
    public static void main(String[] argv) {
        System.out.println(Charset.defaultCharset());
    }
}

这应该打印java程序使用的默认编码的名称。

在Geany中,您可以在菜单 Document&gt;中设置文件编码。设置编码。您需要将此值设置为javac使用的相同值。 Geany手册描述了additional options for setting the encoding

当你看到很多错误抱怨null字符时,Geany很可能将文件存储在每个字符有多个字节的编码中(例如UTF-16),而javac使用带有a的编码每个字符单个字节。如果我将源文件保存为UTF-16,然后尝试使用UTF-8编码使用javac编译它,我会收到您看到的相同错误消息。在Geany中将文件保存为UTF-8后,文件编译没有问题。

答案 1 :(得分:0)

我在 Windows Powershell 中使用命令 echo echo "" > Main.java 生成的文件遇到了同样的问题。 我搜索了这个问题,它似乎与编码有关。我使用 file -i Main.java 检查了文件的编码,结果是 text/plain; charset=utf-16le

后来我删除了该文件,并使用 git bash 使用 touch Main.java 重新创建了它,并成功编译了该文件。我使用 file -i 命令检查了文件编码,这次结果是 Main.java: text/x-c; charset=us-ascii.

接下来我在互联网上搜索,发现要使用 Powershell 创建一个空文件,我们可以使用 Cmdlet New-Item。我使用 New-Item Main.java 创建文件并检查它的编码,这次结果是 Main.java: text/x-c; charset=us-ascii 这次编译成功了。