Странное поведение при преобразовании строки в символ UTF-8 - PullRequest
3 голосов
/ 27 января 2010

У меня есть тип данных, хранящийся в виде двоичного объекта (XML) в БД Oracle. Я извлекаю этот столбец и преобразую в byte [], а затем в строку. Я делаю некоторые строковые операции и преобразовываю их в формат UTF-8 и вставляю обратно в БД. Некоторые специальные символы вставляются как ненужные символы. Я действительно не знаю, что я делаю не так? Любая идея / помощь будет высоко ценится.

Вот исходный код.

     // DB COnnection
     // Get the resultset

     Blob data = (Blob) rs.getBlob(3);
 byte[] bdata = data.getBytes(1,(int)data.length());  

 // Converting to String and doing operation
 s = new String(bdata);   
 // String operation


 // Before inserting into DB, converting to UTF-8 format.
 byte[] dataAsByteArray = s.getBytes("UTF8");  
 updateStmt.setBinaryStream(1,
          new  ByteArrayInputStream(dataAsByteArray),dataAsByteArray.length);

 commit();

1 Ответ

2 голосов
/ 27 января 2010

Первоначально BLOB находится в формате UTF-8? Если в XML это действительно , я бы использовал API-интерфейсы XML для чтения и интерпретации заголовка. Заголовок (если имеется) может указывать кодировку символов. См. DocumentBuilder и считайте BLOB как InputStream, чтобы избежать любых преобразований байтов в символы на вашей стороне.

Обратите внимание, что когда вы конвертируете его в строку, вы не указываете там кодировку байта в символ.

 // Converting to String and doing operation
 s = new String(bdata);

Выше используется кодировка по умолчанию, с которой работает JVM (doc здесь ). Так что я думаю, что есть вероятность ошибки в вышеприведенном. Я бы подтвердил кодировку символов BLOB и применил кодировку byte-char в преобразовании String.

Кроме того, я не могу вспомнить, допустимо ли UTF8 в дополнение к UTF-8 для указания кодировки. Я думаю, это может быть потому, что я ожидал бы исключение в противном случае, но, возможно, стоит проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...