SpEL не может обработать 'é'? - PullRequest
       3

SpEL не может обработать 'é'?

2 голосов
/ 20 декабря 2011

Я француз, поэтому я добавил в свой код é è ê ô û .(и я не очень хорошо говорю по-английски).

У меня есть такой метод в классе Formulaires:

  public static Formulaire exposé()

И в XML-файле config spring япопробуй:

<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.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Акцентированные символы не существуют в базовой кодировке символов UTF-8, и файлы Spring XML, вероятно, используют это.Как говорится в сообщении об ошибке, синтаксический анализатор не может обрабатывать символы с ударением.

Нет ничего, что вы могли бы сделать, чтобы легко решить эту проблему.Акцентированные символы будут создавать проблемы и в других областях программирования.Я думаю, что было бы лучше не использовать их.

0 голосов
/ 20 декабря 2011

Вот еще что. Код ниже в Tokenizer решает, является ли это буквенным символом

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

Ваш персонаж é <= 255, но флаги [ch] инициализируются статическим блоком ниже </p>

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;
    }

Следовательно, можно рассматривать только a-z или A-Z ..

...