Java源文件编码与中文字符

4

我将一个Java项目从Windows平台导入到Ubuntu。
我的Ubuntu版本是10.10,使用Gnome桌面环境:我的LANGUAGE设置为en_US:en
我的终端字符编码为:Unicode (UTF-8)
我的IDE是eclipse,文本文件编码为:GBK。

在源文件中,有一些中文常量字符。

该项目在Windows上使用ant构建成功,但在Ubuntu上编译时出现错误:

非法字符:\65533 

我不想使用\uxxxx格式,因为文件已经存在,

我已经尝试过javac的-encoding选项,但仍然无法编译。


能否将文本文件编码更改为UTF-8,然后在编译器选项中添加“编码UTF-8”? - Nishan
源文件来自svn仓库,而我自己决定将环境更改为Ubuntu,所以我认为不能将文件编码从GBK改为UTF-8。同样的中文字符作为字符串是可以的,但作为单个字符时会导致编译错误。 - OnTheEasiestWay
\65533是替换字符U+FFFD。为了解决这个问题,编写一个非常简单的类来重现这个问题。然后发布源代码和十六进制转储。通过查看它们,我们将能够告诉您确切的问题所在。 - McDowell
在我的Ubuntu上创建的测试GBK Java文件中:char ch = '国'; System.out.println(ch);。如果我不使用-encoding,那么我会得到错误消息:warning: unmappable character for encoding UTF8,但是当我使用-encoding GBK时,javac和java都很高兴。 - OnTheEasiestWay
3个回答

0

我认为问题不在于Ubuntu、Ubuntu的控制台、Javac或Eclipse,而是在于你从Windows传输文件的方式。你必须在将其复制到Ubuntu之前将其存储为utf-8格式,否则在Windows中设置的代码点信息已经丢失。


1
要尝试这个:打开Notepad2(或等效物),将其切换到utf-8,将您的代码复制粘贴到其中,存储它(它将使用utf-8)并将其复制到Ubuntu。现在将该文件与您之前传输的文件进行比较。 - Bernd Elkemann

0

你在build.xml中的<javac>任务指定了encoding选项吗?

应该是这样的:

<javac encoding="GBK" ...>

如果您没有指定编码,那么在Windows上它将使用平台默认编码(在您的设置中为GBK),而在Linux上它将使用平台默认编码(在您的设置中为UTF-8)。
由于您希望构建适用于两个平台(最好不更改任何平台的配置),因此需要在编译时指定编码。

我尝试过这个,但是出现了错误信息:“警告:无法映射字符编码GBK”,该错误信息是针对Java源文件中的注释。 - OnTheEasiestWay

-1
你需要将源代码从Windows代码页转换为UTF-8。使用iconv来完成这个任务。

1
不需要,Java(因此javac)支持Windows编码的可能性很大,他只需要在他的ant构建中指定它。 - Joachim Sauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接