带重音字符从数据库读取后显示乱码符号的修复方案咨询
修复邮件内容乱码问题
核心原因
这是字符编码不匹配导致的——葡萄牙语中的带重音字符(如ã、é、á)属于UTF-8扩展字符集,在数据库存储、读取或邮件发送环节未统一使用UTF-8编码,就会出现�这类乱码。
分步修复方案
1. 确认数据库编码配置
- 检查存储邮件模板的数据库表/列编码,确保设置为
utf8mb4(比标准utf8支持更完整的Unicode字符)- 查看列编码的SQL命令:
SHOW FULL COLUMNS FROM your_table_name LIKE 'message_column'; - 若编码不是utf8mb4,执行修改命令:
ALTER TABLE your_table_name MODIFY COLUMN message_column TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 查看列编码的SQL命令:
- 确保数据库连接字符串指定UTF-8编码,比如JDBC连接需添加参数:
useUnicode=true&characterEncoding=utf8mb4
2. 读取数据时强制UTF-8编码
- 调用
getMessage()读取数据后,若底层框架默认使用了非UTF-8编码(如ISO-8859-1),手动转换编码:String rawContent = getMessage(); String utf8Content = new String(rawContent.getBytes("ISO-8859-1"), "UTF-8");
3. 邮件发送环节指定UTF-8编码
- 发送邮件时必须明确设置内容的编码为UTF-8,同时指定MIME类型:
- JavaMail示例:
MimeMessage mail = new MimeMessage(session); // 纯文本格式 mail.setContent(utf8Content, "text/plain; charset=UTF-8"); // 若为HTML格式 mail.setContent(utf8Content, "text/html; charset=UTF-8"); - 若使用模板引擎(如Thymeleaf),需配置模板渲染时采用UTF-8编码。
- JavaMail示例:
4. 验证模板原始存储
- 重新存入正确的邮件模板内容,确保存入过程使用UTF-8编码,避免数据库存储阶段就出现乱码。
内容的提问来源于stack exchange,提问作者StepZ
相关产品推荐
相关产品推荐

