Java Enum.name() 包含“?”的意外结果

Java Enum.name() unexpected result containing "?"

今天,我的一位用户因为一个奇怪的错误导致我的应用程序在他的设备上崩溃。这是我后端的结果消息:

util.java.MissingResourceException: (Can't find bundle key med?um)

捆绑密钥应该是 "medium" 并使用以下(伪)代码构建:

STAGE stage = something.getStage();
String stageValue = stage.name().toLowerCase();

其中 STAGE 是:

public enum STAGE
{
    EASY,
    MEDIUM,
    HARD;
}

我的印象是 name() 函数总是 return 代码中枚举的值:"MEDIUM"。它怎么可能包含问号?

在 java...

中,您需要注意如何处理小写和大写

在像土耳其这样的地方,您可以找到字母表中有类似元音的地方

Iİ

见下文table

所以在那种情况下你需要显式使用 Locale 以便 java 可以考虑一些特定于语言的转换...

MEDIUM 读作火鸡词将具有小写形式,如 medıum(注意元音没有上点),这将使应用程序崩溃,因为您没有在枚举器中声明这样的值...