Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java邮件与MySQL:可能是字符编码问题?_Java_Mysql_Email_Jdbc - Fatal编程技术网

Java邮件与MySQL:可能是字符编码问题?

Java邮件与MySQL:可能是字符编码问题?,java,mysql,email,jdbc,Java,Mysql,Email,Jdbc,我目前正在使用JDBC和executeQuery从MySQL数据库获取数据。其中一个字段包含我通过ResultSet.getStringemailBody获取的电子邮件内容 邮件使用以下代码发送: Properties props = new Properties(); Session session; Message message; props.put("mail.smtp.host", "mysmtpserver"); session = Session.getInstance(prop

我目前正在使用JDBC和executeQuery从MySQL数据库获取数据。其中一个字段包含我通过ResultSet.getStringemailBody获取的电子邮件内容

邮件使用以下代码发送:

Properties props = new Properties();
Session session;
Message message;

props.put("mail.smtp.host", "mysmtpserver");
session = Session.getInstance(props, null);
message = new MimeMessage(session);

message.setFrom(new InternetAddress("myaddress@example.com", "System");
message.setSubject("Automatic notification");

message.setRecipient(RecipientType.BCC,
        new InternetAddress("admin@example.com", "Admin Distribution List"));
// email contains the previously fetched value
message.setContent(email, "text/plain"); 
Transport.send(message);
这适用于所有字符,包括德语umlaute、方括号等。不幸的是,以下字符失败:

– which is displayed as ? on the mail clients
" which becomes \"
' which is sent as \'

我在网上找不到任何有用的东西,请告诉我。非常感谢

图灵进入\和“图灵进入\”是逃避问题。在insert期间,这些值被转义,因此不会中断sql insert查询。在选择过程中,您必须取消对它们的扫描。不知道具体的java函数…

您的邮件可能被编码为iso-8859-1,其中不包括en-dash的代码点。您可以尝试在setContent调用中将字符集指定为utf-8:

message.setContent(email, "text/plain; charset=utf-8");

然而,这并不能解释您看到的引号问题,但我想这实际上是两个不同的问题。

引号问题的发生是因为在某个点上字符串被转义的次数太多了


如果手动从数据库中选择字符串,是否返回引号?如果是这样,那么在插入数据库之前转义的次数就太多了。

我也想到了同样的方法,但在搜索jdbc java unescape字符串时,找不到任何有用的东西……您不应该在另一端看到转义的字符串。如果你这样做了,你就做错了;被转义并认为它是控制代码的一部分。这是因为\t、\n、\u1234序列等等。字符串a=\\;将显示\。数据库中的条目是由我无权访问的其他系统创建的。我同意,这似乎是一个多重转义问题,这是通过在我这边再次手动转义来解决的。