2011-04-02 54 views
2

給出該枚舉類型:枚舉特殊字符(德國元音)恆定

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

    String value; 
    String id; 
    String description; 

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

當與該枚舉工作時,元音變音的「A」Behälter示出錯誤的。即使當我在構造函數中調試並觀察屬性「描述」時,我發現它是錯誤的。

是否有Java規範禁止這樣的構造中的任何特殊字符?在這一點上我非常無能。

我注意到,當這個枚舉序列化爲JSON並將其返回到我的前端。

感謝

回答

7

它無關,與枚舉 - 你可能會看到同樣的事情,如果你只是有一個控制檯應用程序是這樣的:

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

可能出現的問題:

  • 你不告訴編譯器使用正確的編碼(這是最可能的選擇)
  • 你的調試器不能顯示值co正確地
  • 您的JSON序列化無法正常工作(例如,你不發送正確的編碼)
  • 你的JSON 反序列化工作不正常(如前端無視你指定的編碼)

第一個選項是最有可能的,以說實話。如果是這種情況,則很容易測試 - 將字符串更改爲"Beh\u00e4lter" - 您感興趣的字符是U + 00E4,以便Unicode轉義符允許您在字符串文本中表達它,而不必在實際源代碼中超出ASCII範圍。

如果確實有效,那麼你可以回到前面的代碼,但檢查你的源文件是如何保存的,以及你的編譯器選項是什麼。 (就我個人而言,我建議使用UTF-8作爲完整的Unicode,支持良好的編碼。)

+0

對不起,但我無法確認。我正在開發具有這種IDE設置的應用程序,因爲這些設置已經過時了,而且我從來沒有遇到過調試器或java文件的編碼問題。 我所有的java文件都是UTF-8,我的IDE知道它的UTF-8。 當我運行你的簡單程序時,調試器和命令行顯示正確的東西,即「ä」。 它不是一個「常規」問題,當然它與JSON無關,因爲在序列化發生之前字符串被「破壞」。 – Marc 2011-04-04 10:34:06

+0

但現在在主要的方法中,我使用枚舉,那裏一切都很好。所以我需要重新檢查當前的商業案例,爲什麼它在那裏失敗。無論如何,你的答案可以幫助我。只要我檢查了一些東西,我會盡快進行推廣。 – Marc 2011-04-04 10:40:37

+0

@馬克:你說「當然」,但我們不知道你已經試過了什麼。好吧,它聽起來好像不是編譯器......如果你在調試器的索引3處打印出字符,它顯示了什麼?你能給出一個類似的簡短但完整的程序來顯示它失敗嗎?如果您認爲它與JSON無關,那麼您不必擔心JSON方面的事情。當你說它「顯示錯誤」時,你看到了什麼*正確*。沒有更多信息很難幫助你。 – 2011-04-04 10:41:58