编译使用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中创建的任何程序
# 1 楼答案
这可能是Geany在保存源文件时使用的编码有问题
如果使用
javac
编译文件而不指定-encoding
参数,则使用平台的默认编码。在现代Linux上,这可能是UTF-8;在Windows上,我认为它是ANSI字符集或UTF-16之一要了解默认编码是什么,您可以编译并运行一个小型java程序:
这应该打印java程序使用的默认编码的名称
在Geany中,您可以在菜单文档>;中设置文件编码;设置编码。您需要将其设置为
javac
使用的相同值。Geany手册描述了additional options for setting the encoding由于您看到许多错误抱怨空字符,因此Geany很可能以每个字符多个字节的编码(例如UTF-16)存储文件,而
javac
使用每个字符单字节的编码。如果我将您的源文件保存为UTF-16,然后尝试使用UTF-8编码用javac
编译它,我会收到与您看到的相同的错误消息。将文件保存为Geany中的UTF-8后,该文件可以顺利编译# 2 楼答案
我在Windows Powershell中使用命令echo
echo "" > 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,这次它成功编译