2013-02-15 3 views
0

В расширении Firefox я открываю файл базы данных и выводя содержимое базы данных. Однако Firefox некорректно отображает некоторые символы, предположительно из-за проблемы с кодировкой. Я попытался открыть файл базы данных в SQLite Database Browser и правильно отобразить столбец имен.Как сохранить кодировку символов запроса базы данных

Как правильно обработать эту текстовую строку, чтобы она выводила символы, как я предполагал (например, Caché, а не Caché)?

Фрагмент кода, который воспроизводит эту проблему:

var StorageService = Cc["@mozilla.org/storage/service;1"] 
    .getService(Ci.mozIStorageService); 
_Conn = StorageService.openDatabase(file); 
var stmt = _Conn.createStatement("Select name from data"); 
var RunQuery = function() { 
    return { 
     arr: [], 
     handleResult: function (aResultSet) { 
      var row = aResultSet.getNextRow(); 
      alert([row.getResultByName("name"), 'Cach\u00E9']); 
     }, 
     handleError: function (aError) {}, 
     handleCompletion: function (aReason) {} 
    }; 
}; 
stmt.executeAsync(RunQuery()); 

Выход: Caché,Caché
Предназначенный Выход: Caché,Caché

+0

Вы должны преобразовать строки из UTF-8 в любой кодировки Firefox ожидает. –

ответ

0

Это похоже на работу:

var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"] 
    .createInstance(Ci.nsIScriptableUnicodeConverter); 
converter.charset = "UTF-8"; 
alert([converter.ConvertToUnicode(row.getString("name")), 'Cach\u00E9']); 
0

Предполагая IDX_NAME является индекс столбца name, затем

alert([row.getUTF8String(IDX_NAME), 'Cach\u00E9']); 

даст вы предполагаемый результат.

+0

Удивительно, но это дало тот же результат, что и 'alert ([row.getResultByName (" name "), 'Cach \ u00E9']);' Обратите внимание, что SQLite Database Browser указывает, что моя база данных закодирована в UTF8. – Brian

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