有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编译使用geany制作的程序时出现java非法字符错误\u0000

我一直在使用Geany创建Java程序,直到现在我都能够成功地编译它们。下面用Java创建的简单程序是使用Geany创建的,但是出现了非法字符错误(\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把它复制到Geany。java,编译后得到了相同的非法字符错误。显然,错误在于Raspberry Pi的Geany IDE。我想知道如何修复编辑器以成功创建和编译程序,因为它不仅仅是这个程序,它是使用Geany在Java中创建的任何程序


共 (2) 个答案

  1. # 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中,您可以在菜单文档>;中设置文件编码;设置编码。您需要将其设置为javac使用的相同值。Geany手册描述了additional options for setting the encoding

    由于您看到许多错误抱怨空字符,因此Geany很可能以每个字符多个字节的编码(例如UTF-16)存储文件,而javac使用每个字符单字节的编码。如果我将您的源文件保存为UTF-16,然后尝试使用UTF-8编码用javac编译它,我会收到与您看到的相同的错误消息。将文件保存为Geany中的UTF-8后,该文件可以顺利编译

  2. # 2 楼答案

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

    后来,我删除了该文件,并使用gitbash使用touch Main.java重新创建了它,并成功地编译了该文件。我使用file-I命令检查了文件编码,这次的结果是Main。java:text/x-c;字符集=美国ascii

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