我有一个由“ò、ý、ü、û、ú、ù、÷、ö、ï、î”等字符组成的字符串。在使用 Java 1.6 编译该类之前,myString.split("ý");
或 myString.contains("ý");
等方法可以工作。使用命令行编译类后,这些方法不适用于这些字符。
我必须使用 Java 1.6。
有什么办法可以避免这个问题吗?
最佳答案
默认情况下,Java 源文件以平台默认编码存储,如果未指定 -encoding
,这就是 javac
读取文件的方式。
如果您在 Eclipse 中将字符键入/粘贴到源文件中,Eclipse 会自动将编码更改为 UTF-8(我相信它会首先提示您,但我不确定)。
在 Eclipse 中,理论上每个 Java 源都可以采用不同的编码。 Eclipse 会记住每个源文件的编码,您可以在 Eclipse 的文件属性对话框中查看和/或更改该编码。
如果 Eclipse 已将编码更改为 UTF-8,则在 Eclipse 中编译将正常工作,但在外部编译,例如通过调用 javac
或使用 Ant,将不起作用,因为默认情况下它们将使用平台默认编码读取源文件。
因此,如果您有混合的源文件编码,则必须将它们全部更改为相同的编码,因此使用 javac
可以指定通用编码。您有两个选择:
- 将所有文件转换为UTF-8,并指定
-encoding UTF-8
。 - 将所有文件转换为平台默认编码,并对该编码不支持的字符使用 unicode 转义符,对于
ý
是\u00FD
.
关于String 类的 Java 1.6 方法不适用于所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34648077/