2010-07-20 6 views
0

Меня беспокоит эта типичная проблема со специальными символами.Проблема со специальными символами

У нас есть mbean, работающий на сервере производства tomcat (установленный на Linux), который подбирает XML-каналы и отправляет их для дальнейшей обработки. Проблема возникает, когда mbean обрабатывает специальные символы, которые заменяются символом '??' Метки. Тот же код доступен на локальных серверах и серверах QA, которые отлично работают, хотя версия ОС, версия tomcat одинаковы. Часть кода, который считывает канал XML и отправить JMS Q наклеена ниже:

StringBuffer article = new StringBuffer(); 

InputStreamReader is = new InputStreamReader(new FileInputStream(pendingFile), "utf-8"); 
int data; 
while ((data = is.read()) != -1) { 
    article.append((char)data); 
} 
is.close(); 
is = null; 

log.debug("Read in \n" + article.toString()); 
try { 
    js.writeTextMessage(article.toString(), "server", hostName, processor); 
} catch (JMSException je) { 
    log.error("jms exception: " + je.getMessage()); 
    // server probably shutdown 
    this.stop(); 
    return; 
} 

выше код считывает файлы из «отложенного файла», присоединяет его к StringBuffer, считывает файл журнала и сообщений в очередь JMS. Файл журнала отображает специальные символы как? 'Только в Prod' Подача Xml со специальными символами, как показано ниже:

<?xml version="1.0" encoding="UTF-8"?> 
<hedline> 
    <hl1> 
     Hotelliyöpymiset: Missä hinta ja palvelu vastaavat toisiaan (tai eivät) - asiakastyytyväisyyden huippukaupungit 
    </hl1> 
</hedline>* 

Мы испробовали все possibilites, которые включают в себя:

  1. URI кодировке UTF-8 в server.xml для кота.
  2. проверено переменная среды LANG en_US.UTF-8 на linux.
  3. подтвердил, что XML-файл имеет кодировку по умолчанию как UTF8 без спецификации.

Мы не можем найти причину с сервером Tomcat или операционной системой Linux. Пожалуйста помоги.

ответ

1

Не записывайте строку статьи так же, как текст. Дамп каждого символа в виде шестнадцатеричного целого. Таким образом, вы можете определить, является ли это протоколом, который неисправен, или , читающий, который не работает.

Непонятно мне, что такое поведение очереди JMS - это только сбой регистрации или JMS?

0

Когда вы регистрируетесь через Log4j, например, с FileAppender, вы можете установить кодировку логфайл:

<appender name="SOME_LOG" class="org.apache.log4j.RollingFileAppender"> 
<param name="Encoding" value="UTF-8" /> 

Кроме того, необходимо соответствующее кодировка устанавливается для отображения символов правильно.

Смежные вопросы