特殊字符Sqlcipher

时间:2014-07-25 22:43:38

标签: android sqlite sqlcipher

我正在使用Sqlcipher库加密Android中的数据库。当我创建或打开数据库时,一切都很好但是如果在我的脚本中加密数据库之前有一个特殊字符,加密就是“?”。

INSERT INTO [fr_preguntas_x_formularios] ([idPregunta], [idFormulario], [descripcion], [tipoCampo], [tipoCampoDetalle], [respuesta], [sw_obligatorio], [min_rango], [max_rango], [separador_numerico], [expresion_regular]) VALUES (4, 1, 'Niveles de azúcar en la sangre (ng)', 'numerico', ',,300&1000__#,###', null, '', null, null, null, null);

当我获得“描述”时,我会收到“Niveles de az?car en la sangre(ng)”

我该如何解决这个问题?

我正在用这段代码创建我的数据库

try {
        File file = new File(Environment.getExternalStorageDirectory()
                .getPath() + "/dbtest/" + DATABASE_NAME_SCRIPT);
        InputStream stream = new FileInputStream(file);
        InputStreamReader inputStreamReader = new InputStreamReader(stream);
        BufferedReader bufferedReader = new BufferedReader(
                inputStreamReader);
        String line;
        String strSentenciaSql = "";
        int cont = 0;
        while ((line = bufferedReader.readLine()) != null) {
            if (!line.contains("--") && !line.isEmpty()) {
                strSentenciaSql += line;
                if (line.contains(";")) {
                    database.execSQL(strSentenciaSql);
                    strSentenciaSql = "";
                    System.out.println(cont);
                    cont++;
                } else {
                    strSentenciaSql += " ";
                }
            }
        }
        bufferedReader.close();
        inputStreamReader.close();
        stream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

问题不在库中,在代码中。我检查了这个答案:https://stackoverflow.com/a/9282017/3820750,问题是当BufferReader正在读取时。

BufferedReader bufRdr  = new BufferedReader(
    new InputStreamReader(new FileInputStream(file),"ISO-8859-1"));