在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"), 'Cachu00E9']);
},
handleError: function (aError) {},
handleCompletion: function (aReason) {}
};
};
stmt.executeAsync(RunQuery());
输出:Caché,Caché
预期输出:Caché,Caché
假设IDX_NAME是列name
的索引,则
alert([row.getUTF8String(IDX_NAME), 'Cachu00E9']);
会给你预期的结果。
这似乎有效:
var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
.createInstance(Ci.nsIScriptableUnicodeConverter);
converter.charset = "UTF-8";
alert([converter.ConvertToUnicode(row.getString("name")), 'Cachu00E9']);