2011-12-20 75 views
2

我是法國人,所以我在我的代碼中放了一些éêêôû。 (而且我沒有很好地說英語)。SpEL無法處理'é'?

我有一個這樣的方法在一類Formulaires

public static Formulaire exposé() 

而且在配置Spring的XML文件,我嘗試:

<entry 
key="intro" 
value="#{T(com.myproject.Formulaires).exposé()}"/> 

但春說:

Caused by: java.lang.IllegalStateException: Cannot handle (233) 'é' 
    at org.springframework.expression.spel.standard.Tokenizer.process(Tokenizer.java:193) 
    at org.springframework.expression.spel.standard.Tokenizer.<init>(Tokenizer.java:47) 
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:110) 
    at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:56) 
    at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:1) 
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpressions(TemplateAwareExpressionParser.java:128) 
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseTemplate(TemplateAwareExpressionParser.java:74) 
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:64) 
    at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:119) 
    ... 47 more 

如果我把e而不是é都是好的。

是否有一些關於口音的SpEL限制?

我用spring 3.0.5。

謝謝。

回答

3

重要字符不存在於基本的UTF-8字符編碼中,並且Spring XML文件可能使用該字符。如錯誤所示,解析器無法處理重音字符。

沒有什麼可以做,以輕鬆解決這個問題。重要人物也會在編程的其他方面出現問題。我認爲最好不要使用它們。

+0

幸運的是,除了春天拼寫,在其他編程方面對我來說沒有任何問題。無論如何,我要刪除這一個。謝謝。 – Istao 2011-12-20 07:27:35

+2

好吧,假設你已經嘗試了編程的所有領域,我仍然建議停止使用重音字符。它會以某種方式或另一種方式咬你。 – 2011-12-20 07:29:12

+2

我也是法國人,這是我一生中第一次見到包含口音的方法名稱。 BRAVO !!!爲什麼不重寫java,以便它可以接受「public statique Formulairesexposé」;-) – Philippe 2011-12-20 21:30:13

0

這裏更多。在標記者下面的代碼決定是否它是一個字母字符

private boolean isAlphabetic(char ch) { 
    if (ch>255) { 
     return false; 
    } 
    return (flags[ch] & IS_ALPHA)!=0; 
} 

你的字符E是< = 255但是flags [CH]由靜態塊下方

static { 
    for (int ch='0';ch<='9';ch++) { 
     flags[ch]|=IS_DIGIT | IS_HEXDIGIT; 
    } 
    for (int ch='A';ch<='F';ch++) { 
     flags[ch]|= IS_HEXDIGIT; 
    } 
    for (int ch='a';ch<='f';ch++) { 
     flags[ch]|= IS_HEXDIGIT; 
    } 
    for (int ch='A';ch<='Z';ch++) { 
     flags[ch]|= IS_ALPHA; 
    } 
    for (int ch='a';ch<='z';ch++) { 
     flags[ch]|= IS_ALPHA; 
    } 

因此僅AZ或AZ初始化可以考慮..