枚举常数中的特殊字符(德语变音符号)

时间:2011-04-02 09:58:54

标签: java encoding internationalization enums

给出这个枚举类型:

    public enum PackageType  {
    BEHAELTER("BH", "Behälter")

    String value;
    String id;
    String description;

     PackageType(String id, String description) {
        this.id = id;
        this.description = description;        
    }
}

使用此枚举时,Behälter中的变音符号“ä”显示错误。即使我在构造函数中调试并观察属性“description”,我也看错了。

是否有Java规范禁止像这样的构造中的任何特殊字符?在这一点上我很无能为力。

我注意到在将此枚举序列化为JSON并将其返回到我的前端时。

谢谢

1 个答案:

答案 0 :(得分:7)

这与枚举无关 - 如果您只有这样的控制台应用程序,您可能会看到同样的事情:

public class Test {
  public static void main(String[] args) {
    String x = "Behälter";
    System.out.println((int) x.charAt(3));
  } 
}

可能出现的问题:

  • 您没有告诉编译器使用正确的编码(这是最可能的选项)
  • 您的调试器无法正确显示值
  • 您的JSON序列化无法正常工作(例如,您没有发送正确的编码)
  • 您的JSON 反序列化无法正常工作(例如,前端忽略了您指定的编码)

第一种选择是最可能的,说实话。如果是这种情况,则很容易测试 - 将字符串更改为"Beh\u00e4lter" - 您感兴趣的字符是U + 00E4,因此Unicode转义允许您在字符串文字中表达它而不会超出ASCII实际的源代码。

如果确实有效,那么您可以回到之前的代码,但检查源文件实际保存的方式,以及编译器选项的含义。 (我个人建议使用UTF-8作为完全Unicode,支持良好的编码。)