在 .java 文件中使用 Unicode 字符?

3

我想在一个类文件中设置一个Unicode字符,例如:

TextView tv = ...;
tv.setText("·");

在Java文件中使用Unicode字符是否存在潜在问题?

谢谢。


1
这可能是一个吹毛求疵的评论,但官方的Java语言规范指出“程序是用Unicode编写的。”我想这意味着在Java中不能有任何非Unicode字符,不管那意味着什么。你可能需要重新表达问题。在这个行业中,术语和命名非常重要。 :) - Ray Toal
2个回答

4

Java字符串支持Unicode,因此您不应遇到任何问题。您可能需要检查TextView类是否处理所有Unicode字符(它应该这样做),但Java本身将处理Unicode字符。

您还应确保文件以正确的编码设置保存。这基本上意味着您的编辑器应该将Java文件保存为UTF-8编码的Unicode。有关此问题的更多详细信息,请参见此答案的注释。


5
请确保你使用的编辑器将Java源代码保存为UTF-8编码(这是编译器所期望的)。在Eclipse中,最简单的方法是导航到Windows-> Preferences-> General-> Workspace,然后将文本文件编码设置为UTF-8。 - Ted Hopp
我一直在想为什么Eclipse会根据操作系统环境设置默认的文本文件编码。在我看来,IntelliJ的默认设置整体上要好得多。 - xiaofeng.li
@TedHopp 嗯,它不支持理解UTF-16(带BOM)之类的吗? - user166390
1
@pst编译器可以接受任何文本文件编码,只要您明确告知即可。但是,如果我没记错的话,类文件中的字符串编码为UTF-8。 - xiaofeng.li
1
@Oleksi:上面的评论回答了这个问题,但是我认为你的回答还不够。这个问题是关于在Java源文件中包含Unicode字符的,这需要将文件保存在适当的编码方式下,并告诉javac编译器以该编码方式读取文件。 - Greg Kopff
@GregKopff 是的,我已经更新了答案,讲述了如何保存文件。 - Oleksi

3

在 .java 文件中使用 Unicode 字符是否存在潜在问题?

正如您所知,JVM 中的字符串是以 Unicode 存储的,因此问题是如何处理 Java 源文件 中的 Unicode...

简而言之,使用 Unicode 是可以的。有几种方法可以解决这个问题...

默认情况下,javac 编译器期望源文件采用平台默认编码。可以使用 -encoding 标志来覆盖此设置:

-encoding encoding
设置源文件编码名称,例如 EUCJIS/SJIS/ISO8859-1/UTF8。如果未指定 -encoding,则使用平台默认转换器。

或者,如果它是单个字符(就像它看起来的那样),您可以将源文件保留在平台默认编码中,并使用 Unicode 转义序列指定该字符:

tv.setText("\u1234");

...其中'1234'是所需字符的Unicode值。

另一种选择是先将文件保存为兼容Unicode的编码(如UTF-8),然后使用native2ascii将该文件转换为本地编码(它会将任何超出范围的字符转换为相应的Unicode转义序列)。

名称
native2ascii - 本地到ASCII转换器

语法
native2ascii [选项] [inputfile [outputfile]]

描述
Java编译器和其他Java工具只能处理包含Latin-1或Unicode编码(\udddd表示法)字符的文件。 native2ascii将包含其他字符编码的文件转换为包含Latin-1或Unicode编码字符的文件。

如果省略outputfile,则使用标准输出进行输出。此外,如果省略inputfile,则使用标准输入进行输入。


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