2013-02-15 27 views
0

在Firefox扩展中,我打开一个数据库文件并显示数据库内容。但是,Firefox正在显示一些错误的字符,可能是由于编码问题。我试图在SQLite数据库浏览器中打开数据库文件,名称列正确显示。如何维护数据库查询的字符编码

如何正确处理该文本字符串,以便按照我的意愿输出字符(例如,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的预期。 – 2013-02-15 21:20:32

回答

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数据库浏览器确实声明我的数据库是UTF8编码的。 – Brian 2013-02-15 21:50:38