【问题标题】:using UTF-8 characters in JAVA variable-names在 JAVA 变量名中使用 UTF-8 字符
【发布时间】:2014-02-26 21:44:43
【问题描述】:

我想知道我可以使用我的母语字符(或字符串)作为 JAVA 变量名 吗? 所以,我用Myanmar Unicode进行了如下测试。

    public static void main(final String[] args) {
    String ဆဆဆ = "မောင်မောင်";
    System.out.println("ကောင်းသောနေ.ပါ " + ဆဆဆ);
}

此代码将我的成功消息显示为 'ကောင်းသောနေ.ပါ မောင်မောင်'。但在下面的代码中使用另一个变量名(它也是我的母语字符串).....

    public static void main(final String[] args) {
    String တက်စတင်း = "မောင်မောင်";
    System.out.println("ကောင်းသောနေ.ပါ " + တက်စတင်း);
}

在我的 Ecliplse IDE 中产生编译时错误。

此行有多个标记 - 标记的语法错误,删除这些标记 - 出现异常 - 中的意外字符 0x103a 标识符

有什么建议吗?为什么会出现这个问题?感谢您耐心阅读我的问题.......

【问题讨论】:

  • 它在 Eclipse 中对我有用。

标签: java variables syntax utf-8 character-encoding


【解决方案1】:

Java 6 仅支持 Unicode 4.0,这是一个相当旧的 Unicode 版本,不包括缅甸(或至少只是初级)。在 Java 7 中支持的 Unicode 5.1 添加了扩展缅甸支持。

要解决此问题,请安装 JDK 7(如果尚未安装),并将 Eclipse 项目配置为编译为 Java 7(项目->属性->Java 编译器)。请注意,编译为 Java 7 的代码无法在 Java 6 或更低版本上运行。

【讨论】:

  • 老实说,要解决此问题,请勿使用缅甸作为标识符:) 但正确答案为 +1。
  • 我将 Java 文件保存为没有 BOM 的 UTF8。当我使用 JDK 6 编译时,它抱怨 4154 和 4152 个字符。当我使用 JDK 7 编译时,成功生成了一个类文件。但即使使用 JDK 7,它似乎仍然需要 JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 env 变量(至少这是我的测试显示的)。所以我也 +1。
【解决方案2】:

在您的 IDE 中配置字符集。如果您使用的是 Eclipse,请转到属性并搜索字符集或编码。为您的 java 编辑器将其配置为 UTF-8。

【讨论】:

  • 如果没有适当的字符集,第一个代码 sn-p 是不可能工作的。
  • @MarkoTopolnik IIRC Eclipse 默认使用系统的本机编码,这可能适用于第一个 sn-p,但不适用于第二个,因为它包含修饰符(例如 \u103a ( ်,MYANMAR SIGN ASAT)在错误消息中提到)
  • @Njol 但问题发生在 Java 字符级别而不是编码级别,正如您自己提到的那样。编译器将字节正确解码为 \u103a 并拒绝它。
  • @MarkoTopolnik 正确。我找到了实际问题并发布了答案。
  • 我已将我的 IDE >>> 工作区配置为 utf-8,并将文件属性配置为 utf-8,但仍然出现错误。
【解决方案3】:

如果字符是字母或数字(第一个字符只能是字母),您可以使用您的母语字符作为 JAVA 标识符。 要确定字符是字母还是数字,请使用 Character.isLetterCharacter.isDigit

小心使用支持您的字符的编码。最佳选择是 UTF-8。

在字符串中,您可以使用任何字符。

【讨论】:

  • 编译器抱怨 0x103a,这是一个零空间组合字符。
  • @Njol 是 တ(MYANMAR LETTER TA) 字母吗?哦真的吗 ?这对我来说是一件了不起的事情。我是缅甸公民,但我不知道,但你是.....非常感谢您为我提供的丰富知识。
  • @Cataclysm 我实际上只看到那个字母的奇怪符号(就像 Alexei 可能的那样),但是如果 Unicode 说它是一个字母,那么 Java 也会这样做并接受它作为标识符的一部分。
【解决方案4】:

我不确定,但请尝试设置此操作系统环境
变量JAVA_TOOL_OPTIONS 看看是否有帮助。

C:\Work>echo %JAVA_TOOL_OPTIONS%
-Dfile.encoding=UTF8

【讨论】:

    【解决方案5】:

    如何使用

    Charset.forName("UTF-8").encode(myString)

    【讨论】:

    • 他说的是代码本身的 UTF-8,而不是支持 UTF-8 数据。
    猜你喜欢
    • 2018-05-17
    • 2018-07-28
    • 2014-04-07
    • 2012-12-07
    • 2023-03-27
    • 1970-01-01
    • 2011-02-21
    • 2016-06-09
    • 1970-01-01
    相关资源
    最近更新 更多