2013-11-26 4 views
0

Проблема, которую я пытаюсь исправить, заключается в следующем: Пользователи нашего приложения - это копирование/вставка символов из документов, связанных с Windows, например Word, и наше приложение не распознает одиночные и двойные кавычки или маркеры.Почему мои кодированные данные UTF-8 не остаются? UTF-8? закодированы?

Эти шаги, которые я взял до сих пор, чтобы получить эти данные в формате UTF:

  1. внутри servers.xml, в теге Connector, я добавил атрибут URIEncoding = "UTF-8".

  2. в bean-компоненте, заряженном хранением ввода, я создал байт [] и передал в String содержимое inputNote, а затем преобразовал его в UTF-8. Затем передал преобразованную строку UTF-8 обратно в строку вводаNoteText. См. Ниже приведенный ниже код для конденсированного кода.

    byte[] bytesInUTF8inputNoteText = inputNoteText.getBytes("UTF-8"); 
    
    inputNoteText = new String(bytesInUTF8inputNoteText, "UTF-8"); 
    this.var = inputNoteText; 
    
  3. В переменной сеттер заряженного с проведением результата из БД запроса: setNoteText (noteText), чтобы преобразовать данные заметки, поступающие из запроса к базе данных в байтах в формате UTF8, а затем преобразуется обратно в строку и установите его в свойство String noteText. Также ниже.

    public void setNoteText(String noteText) throws UnsupportedEncodingException { 
         byte[] bytesInUTF8inputNoteText = noteText.getBytes("UTF-8"); 
         String noteTextUTF8 = new String(bytesInUTF8inputNoteText, "UTF-8");      
         this.noteText = noteTextUTF8;} 
    
  4. В SQL Server я изменил тип данных из текста в NVARCHAR (MAX), чтобы сохранить данные в Unicode, несмотря на то, что это другой тип Unicode.

То, что я вижу, когда я копировать/вставить из дока MS Word в наше входной JSF текстового поля:

В Eclipse, если я поставил часы на имуществе в бобе, когда данные в этой строке свойство было преобразовано в UTF-8, все символы находятся в формате UTF-8. Когда я отправляю на SQL Server строку данных, хранящихся в nvarchar (max), тип данных корректно отображает все символы в формате UTF-8. Затем, когда возвращается resultSet и свойство hold заполняется строкой, возвращаемой из запроса db, оно также показывает, что все правильно отформатированы в UTF-8 .... НО, ... где-то между правильным строковым значением, которое сидя в собственности, которая привязана к странице JSF и странице JSF, 1.2, кстати, значение не форматируется, поэтому я вижу вопросительные знаки, где я должен видеть одиночные/двойные кавычки и точки маркера. Я надеюсь, что кто-то столкнулся с этим типом проблемы раньше и может пролить свет на то, что мне нужно сделать, чтобы исправить это. Кажется, похоже на ошибку JSF, заблаговременно за ваш вклад!

+0

У SQL Server нет встроенной поддержки UTF-8. См. [Эта статья] (http://support.microsoft.com/kb/232580). –

ответ

0

попробовать это

String noteText = new String (noteText.getBytes ("iso-8859-1"), "UTF-8"); 
0

При копировании пасты из окон документов, формат кодирования не является UTF-8, но [Windows-1252] (http://en.wikipedia.org/wiki/Windows-1252). Обратите внимание на ячейки, отмеченные зелеными границами. Эти символы DONT отображаются в кодировке UTF-8, поэтому при чтении вам придется использовать кодировку Windows-1252.