我有
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:cities.db");
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("select * from cities;");+
while (rs.next()) {
byte[] bytes = rs.getBytes("country");
String country = new String(bytes, "utf-8");
System.out.println(country);
}
rs.close();
conn.close();
我的输出显示 ,例如ä,ö,ü。
如果我从命令行运行sqlite3
并从那里查询表,那么字符很好......
“pragma编码;”显示utf-8 ......
如果我调试,则字节数组在“ü”...
处有“-127”如何解决这个问题? 什么可能导致这个问题?
链接到示例SQLite文件(只有一行):
答案 0 :(得分:2)
你可以试试
吗?Class.forName(org.sqlite.JDBC.class.getCanonicalName());
String url = "jdbc:sqlite:";
SQLiteConfig config = new SQLiteConfig();
config.setEncoding(SQLiteConfig.Encoding.UTF8);
Connection conn = DriverManager.getConnection(url, config.toProperties());
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("select * from cities;");+
while (rs.next()) {
String country = rs.getString("country");
System.out.println(country);
}
答案 1 :(得分:1)
这里的问题是SQLite数据库包含使用旧的IBM OEM字符集(code page 437)编码的字符,因此'ü'字符编码为0x81。这是Unicode中未使用的字符以及ISO- *和Windows- *字符集的所有(?)。
我能够使用
正确提取“Country”值$('[data-click="set-message-status"]').on('click', function (e) {
e.stopPropagation();
e.preventDefault();
var status = $(this).attr('data-status');
var tooltipText = 'Mark as Read';
if (status == 'read') {
$(this).removeClass('read');
//$('.notification-item').find('.media').removeClass('bg-success');
$(this).attr('data-status', 'unread');
//$('.notification-item').find('.media').attr('data-status', 'unread');
} else {
$(this).addClass('read');
//$('.notification-item').find('.media').addClass('bg-success');
$(this).attr('data-status', 'read');
//$('.notification-item').find('.media').attr('data-status', 'read');
tooltipText = 'Mark as Unread';
}
$(this).tooltip('hide').attr('data-original-title', tooltipText).tooltip('fixTitle');
});