2

私はフランス人なので、コードにé ê ô ûをいくつか入れました。(そして私は英語があまり上手ではありません)。

クラスにそのようなメソッドがありFormulairesます:

  public static Formulaire exposé()

そして、構成スプリング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ですが、フラグ[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 に答える