如何维护数据库查询的字符编码

时间:2013-02-15 19:31:19

标签: javascript sqlite firefox-addon

在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é

2 个答案:

答案 0 :(得分:0)

假设IDX_NAME是列name的索引,那么

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

会给你预期的结果。

答案 1 :(得分:0)

这似乎有效:

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