Java 枚举常量中的特殊字符(德语umlaut)

Java 枚举常量中的特殊字符(德语umlaut),java,encoding,internationalization,enums,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;

给定此枚举类型:

    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中的umlaut“ä”显示错误。即使在构造函数中调试并查看属性“description”时,我也会发现它是错误的

是否有Java规范禁止在这样的构造中使用任何特殊字符?在这一点上我是相当无知的

我注意到,当将这个枚举序列化为JSON并将其返回到我的前端时


谢谢

这与Enum无关-如果您有这样一个控制台应用程序,您可能会看到同样的情况:

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 escape允许您在实际源代码中以字符串文字表示,而无需超出ASCII


如果这确实有效,那么您可以返回到前面的代码,但检查源文件实际上是如何保存的,以及编译器选项是如何显示的。(就我个人而言,我建议使用UTF-8作为一种完整的Unicode编码,并且得到了很好的支持。)

对不起,但我不能证实这一点。我一直在用这个IDE设置开发应用程序,而且我从来没有遇到过调试程序或java文件编码方面的问题。我所有的java文件都是UTF-8格式的,我的IDE知道它是UTF-8格式的。当我运行您的简单程序时,调试器和命令行会显示正确的内容,即“ä”。这不是一个“一般”问题,当然也与JSON无关,因为字符串在序列化发生之前是“断开的”。但是现在在这个主方法中,我使用了枚举,一切都很好。因此,我需要重新检查当前的商业案例,为什么它在那里失败。也许你的回答对我有帮助。只要我检查了一些东西,我们就会马上推广。@Marc:你说“当然”,但我们不知道你已经尝试了什么。好吧,听起来好像不是编译器。。。如果在调试器中打印出索引3处的字符,它会显示什么?你能给出一个类似的简短但完整的程序来说明它失败了吗?如果您认为它与JSON无关,那么就不必担心JSON方面的问题。当你说“显示错误”时,你到底看到了什么?没有更多的信息,很难进一步帮助你。我现在试了几天。一切都很好,就好像这个问题根本不存在一样。这很烦人,但看起来像是一个系统或IDE的怪异之处。但是你的回答还是很有帮助的。