从Java中的本地SQLite数据库读取emojis
我正在构建一个示例应用程序,它将会话从iOS sms数据库文件转换为可读的html页面 但在控制台和html页面中,emojis显示为“?”,但在DB浏览器中,它们显示正常 HTML预览示例: 我的代码是:从Java中的本地SQLite数据库读取emojis,java,sql,emoji,Java,Sql,Emoji,我正在构建一个示例应用程序,它将会话从iOS sms数据库文件转换为可读的html页面 但在控制台和html页面中,emojis显示为“?”,但在DB浏览器中,它们显示正常 HTML预览示例: 我的代码是: public static void main(String[] args) throws SQLException, IOException { String url = "jdbc:sqlite:C:/test/sms2.db"; Connection conn
public static void main(String[] args) throws SQLException, IOException {
String url = "jdbc:sqlite:C:/test/sms2.db";
Connection conn = DriverManager.getConnection(url);
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("SELECT handle_id,is_from_me,text FROM message");
File f = new File("C:\\Users\\theda\\Documents\\Messages\\convo\\+1**********.html");
if(!f.exists())
f.createNewFile();
FileWriter w = new FileWriter(f);
WriterOutputStream write = new WriterOutputStream(w, Charset.forName("utf8"));
w.append("<link rel='stylesheet' type='text/css' href='message.css'>");
w.append("<body>");
while(rs.next()){
if(rs.getInt("handle_id") == 3){
String st = " ";
String fromMe = " ";
if(rs.getInt("is_from_me") == 1)
fromMe = "true";
else
fromMe = "false";
st = "<div class='message' data-outgoing='" + fromMe + "'>" + rs.getString("text") + "</div><br>";
System.out.println(st);
w.append(st);
}
}
w.append("</body>");
w.close();
}
确保您的HTML页面在元标记中使用了正确的字符集:
<meta charset="utf-8" />
一般来说,在将特殊字符放入HTML时,将其编码为HTML实体也是一个好主意。根据,您可以使用Java的StringEscapeUtils.escapeHtml方法来实现这一点。谢谢您的回答,但现在它们显示为� 在html上,但他们确实会说“&55356;”和控制台中的类似,我建议您通过运行页面输出。它可能会识别页面上的一些编码问题。