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

Mar*_*arc 2 java enums encoding internationalization

鉴于此枚举类型:

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

    String value;
    String id;
    String description;

     PackageType(String id, String description) {
        this.id = id;
        this.description = description;        
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢

Jon*_*eet 7

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

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

可能的问题:

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

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

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