2

我是法国人,所以我在我的代码中加入了一些é è ê ô û 。(而且我的英语不太好)。

我在课堂上有这样的方法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限制吗?

我使用弹簧 3.0.5。

谢谢。

4

2 回答 2

3

重音字符在基本的 UTF-8 字符编码中不存在,Spring XML 文件可能使用它。正如错误所说,解析器无法处理重音字符。

没有什么可以轻松解决这个问题。重音字符也会给其他编程领域带来问题。我认为最好避免使用它们。

于 2011-12-20T07:22:02.357 回答
0

这里还有更多内容。Tokenizer 中的以下代码决定它是否是字母字符

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

您的角色 é <=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 ..

于 2011-12-20T08:32:42.360 回答