-
解决HttpClient发送文件 标题中文乱码的问题
2020-09-18 15:12:16@Test public void testFileName() throws IOException { ... // 组装post请求体,以文件的形式发送 MultipartEntityBuilder builder = MultipartEntityBuilder.create(); // 解决上传文件,文件名中文乱码问题 bui示例代码如下:
@Test public void testFileName() throws IOException { File file = new File("E:\\中文1.docx"); // 组装post请求体,以文件的形式发送 MultipartEntityBuilder builder = MultipartEntityBuilder.create(); // 解决上传文件,文件名中文乱码问题 builder.setCharset(StandardCharsets.UTF_8); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); // 两种发送文件的方式 builder.addBinaryBody("file", file); // builder.addPart("file", new FileBody(file)); HttpEntity reqEntity = builder.build(); // 创建post请求 HttpPost httpPost = new HttpPost("http://127.0.0.1:8500/upload"); // 设置请求体 httpPost.setEntity(reqEntity); try ( // 创建Httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); // 发送请求并处理返回的响应 CloseableHttpResponse response = httpClient.execute(httpPost); ) { StatusLine statusLine = response.getStatusLine(); System.out.println("statusLine = " + statusLine); } }
核心代码为
builder.setCharset(StandardCharsets.UTF_8); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
这两句
-
android发送邮件乱码解决
2019-09-25 13:10:00目录android发送邮件乱码解决情况说明复现解决问题分析解决办法Tips android发送邮件乱码解决 情况说明 最近在写android的代码要用到发送邮件的功能,所以上github上找到一个库,但是发现接受的邮件中文显示乱码所以...android发送邮件乱码解决
情况说明
最近在写android的代码要用到发送邮件的功能,所以上github上找到一个库,但是发现接受的邮件中文显示乱码所以开始解决。
复现
- github上android发送mail的库
根据库中的readme文件在自己的工程中导入需要的包,并进行申请网络权限等操作。最后根据readme上的提示添加发送mail的代码。这里readme有一个小问题,示例里面导入的库的版本是0.0.2,而示例使用的代码有的属性是0.0.3才开始支持的,所以你导入库的时候
解决
问题分析
- 邮件中邮件的摘要中文正常显示,但是邮件的主体正文中文乱码
查阅资料发现,邮件的摘要和正文的显示方式是不同的。邮件的摘要是直接用字符串发送和显示的,而正文为了使邮件的展现能力更好采用了html的展示方式。html的编码格式需要指定,所以猜测是html的编码问题 - 在源码中找到邮件正文的处理代码
下面是调用函数的示例
MaildroidX.Builder() .smtp("") .smtpUsername("") .smtpPassword("") .smtpAuthentication() .port("") .type(MaildroidXType.HTML) .to("") .from("") .subject("") .body("") .attachment("") //or .attachments() //List<String> .onCompleteCallback(object : MaildroidX.onCompleteCallback{ override val timeout: Long = 3000 override fun onSuccess() { Log.d("MaildroidX", "SUCCESS") } override fun onFail(errorMessage: String) { Log.d("MaildroidX", "FAIL") } }) .mail()
注意上面的两个属性,一个是body,这里传入的就是邮件的正文,一个是type,这个指定邮件的发送格式,这里指定的就是html。知道了上面这些,接下来想到的肯定是我把正文传进去你是怎么处理我的正文并发送的。
- 查看源码的发送代码
ctrl加左键点击上面示例代码最后的mail()函数转到发送部分的源码,发现下面的处理body的代码
// Set Subject: header field message.subject = subject // Create the message part var messageBodyPart: BodyPart = MimeBodyPart() // Now set the actual message messageBodyPart.setContent(body,type) // Create a multipart message val multipart = MimeMultipart() // Set text message part multipart.addBodyPart(messageBodyPart) // Part two is attachment messageBodyPart = MimeBodyPart()
看到这行代码
messageBodyPart.setContent(body,type)
这一看就知道是将body以type指定的一种处理方式转化后存起来发送。那么问题应该是出在这个转化上。当我想查看setContent
函数的函数却发现找不到,只好上网找这个函数的用法,在这里(How do I send a HTML mail)我找到了答案。其中有代码setContent(message, "text/html; charset=utf-8")
对比库中的源码setContent(body,type)
其中type的值为text/html 到这里差不多就已经知道原因了。charset=utf-8
代表着编码格式是utf-8,以这种编码格式就不会出现乱码,而源码中没有写,就是用了默认的参数,而且我通过查询我邮件的源码发现这个默认的参数是charset=us-ascii
。到这里就已经知道了出现乱码的原因。解决办法
- 因为仓库的代码是只读的,你要自己新建一个文件重写要修改的那个类,这里需要重写MaildroidX这个类,复制粘贴后只需修改你要修改的部分。
- 将所有MaildroidX类的引用换成你的MaildroidX类
- 添加需要的依赖
implementation 'com.sun.mail:android-mail:1.6.2' implementation 'com.sun.mail:android-activation:1.6.2'
Tips
- 本次修改我已经提交了pull request,希望能被仓库的开发者采纳
- 另外附上我自己写的android上将短信转发邮件的app的github地址,SMS-Mail,欢迎start和fork
- github上android发送mail的库
-
easypoi之post请求导出excel(解决ajax发送请求乱码无法导出excel文件问题)
2020-05-25 15:32:05坑1:ajax发送请求乱码无法导出excel文件,因为文件是二进制格式,ajax最终会将返回的数据解析成json,所以导致乱码。 坑2:通过form表单发送post请求,后端接口不要用 @RequestParam 和 @RequestBody 修饰 原因:...坑1:ajax发送请求乱码无法导出excel文件,因为文件是二进制格式,ajax最终会将返回的数据解析成json,所以导致乱码。
坑2:通过form表单发送post请求,后端接口不要用 @RequestParam 和 @RequestBody 修饰
原因:form传参的格式是username=xxx,pwd=xxx这样的格式,
ajax是将对象转成字符串进行传参,格式为username : xxx,pwd : xxx
因此,如果想post请求方式导出excel,则必须用form提交请求,且后端接口不能用@RequestParam 和 @RequestBody修饰参数
否则报错,无法解析参数,400错误
思路:改变发送请求的方式
解决方案1:
通过在div中写form表单的方式
现在页面最底部生成一个form表单,对应后台接口的封装对象
<div> <form id="exportUser" method="POST" enctype="multipart/form-data" action="/employee_api/personnel/exportExcelPartData"> <p> <input type="hidden" id="locale" name="locale" value=""/> <input type="hidden" id="userIDList" name="userIDList" value=""/> </p> </form> </div>
js中给<inpurt>赋值并发送请求:
exportExcelPartDataOrAllDataFunc(){ if (this.selectedIds==null || this.selectedIds.length===0){ this.$confirm(this.$t('emp.areYouSureExportAllData') + " ?", this.$t('emp.reminder'), { confirmButtonText: this.$t('emp.confirm'), cancelButtonText: this.$t('emp.cancel'), type: 'warning' }).then(() => { exportExcelAllData(this.$i18n.locale); }, () => { }); }else { //form表单赋值并发送请求 document.getElementById("locale").value=this.$i18n.locale; document.getElementById("userIDList").value=this.selectedIds; console.log(document.getElementById("exportUser")) document.getElementById("exportUser").submit(); } },
后台代码:
@ApiOperation("导出勾选的人员信息数据") @PostMapping("/exportExcelPartData") public void exportExcelPartData(HttpServletResponse response, ExportExcelPartDataParam excelParam) throws Exception { personnelService.exportUserExcelPartDataOrAllData(response,excelParam); }
解决方案2:
js拼接form表单方式提交(比较推荐,方便)
js代码,封装参数对象并发送请求
exportExcelPartDataOrAllDataFunc(){ if (this.selectedIds==null || this.selectedIds.length===0){ this.$confirm(this.$t('emp.areYouSureExportAllData') + " ?", this.$t('emp.reminder'), { confirmButtonText: this.$t('emp.confirm'), cancelButtonText: this.$t('emp.cancel'), type: 'warning' }).then(() => { exportExcelAllData(this.$i18n.locale); }, () => { }); }else { const dataParam = { locale: this.$i18n.locale, userIDList: this.selectedIds, }; //发送请求 exportExcelPartData(dataParam); } }, postExcelFile(params) { //params是post请求需要的参数,url是请求url地址 var url = request.baseURL + "/personnel/exportExcelPartData"; var form = document.createElement("form"); form.style.display = 'none'; form.action = url; form.method = "post"; form.enctype="multipart/form-data"; document.body.appendChild(form); for (var key in params) { var input = document.createElement("input"); input.type = "hidden"; input.name = key; input.value = params[key]; form.appendChild(input); } form.submit(); form.remove(); }
后端代码是和上面代码一样的
@ApiOperation("导出勾选的人员信息数据") @PostMapping("/exportExcelPartData") public void exportExcelPartData(HttpServletResponse response, ExportExcelPartDataParam excelParam) throws Exception { personnelService.exportUserExcelPartDataOrAllData(response,excelParam); }
最终解决问题
-
关于发送邮件附件中文文件名称乱码的问题
2019-03-28 14:43:16问题描述:发送压缩文件到qq邮箱,发现标题为中文名称,能正常显示,但是附件的中文名称为乱码。 任务:解决附件中文名称的乱码问题。 前期资料总结: 1、SMTP乱码解决方案(源自...问题描述:发送压缩文件到qq邮箱,发现标题为中文名称,能正常显示,但是附件的中文名称为乱码。
任务:解决附件中文名称的乱码问题。
前期资料总结:
1、SMTP乱码解决方案(源自https://blog.csdn.net/saokeliu/article/details/5194547)Smtp发送中文邮件的时候也会产生像ftp乱码的现象,不知道在网上这样的资料很少,让我们那些第一次遇到这种问题的人真不知道该从何下手,不过还好,这个问题相对ftp的解决起来简单一些,因为我们可以很清楚地想到还是要根据他的rfc文档来进行代码的调整,描述smtp的rfc文件有:rfc2821,2045,2046,2047,2048,2049,因为rfc文档是权威性的协议开发”手册”,所以进行网络协议的开发的对于这种编程遇到问题第一想到的当然是查文档,
Smtp发送邮件要注意编码方面问题的至少包括两个部分:邮件主题和邮件内容,至于其他的属性都是英文的表示形式,对这种情况编码方式并不敏感,所以我们最主要的任务就是找出设置主题和内容为某种制定编码的格式的rfc参考文档:
Subject:rfc2047
Connect:rfc2045
sprintf(pOutBuff,“Subject: =?utf-8?B?%s?=/r/n”,local_out_buf)//指定邮件主题为utf-8编码,当然也可以制定其他的,但是utf-8是现在字符编码都争相支持的最有前途的一种编码方式,所以为了最大可能的使得我们的代码通用性更强,最好是使用utf-8的编码方式.
sprintf(pOutBuff, “Content-Type: text/plain;/r/n/tcharset=/“utf-8/”/r/n”);//指定邮件内容为utf-8编码。
对于那些不需要附件或者是附件不会包含中文的文件或音频视频或二进制等文件都不需要进行处理了,但是如果你的附件的文件名为中文的话这个时候也是需要和上面的方式一样的处理方法.
sprintf(pOutBuff,“Subject: =?utf-8?B?%s?=/r/n”,local_out_buf)//一样的方法设置附件名的编码方式。
差点忘记说了,传送过去的需要你将原来的编码进行转换到你设置的编码方式去了,比如这里就需要你将原来的编码转到utf-8。
2、KETTLE 发送邮件乱码修正 (源自https://blog.csdn.net/mendan/article/details/48784565#0-tsina-1-45165-397232819ff9a47a7b7e80a40613cfe1)
1) 发件人名称乱码
826行: 将msg.setFrom( new InternetAddress( sender_address ) );
改成:
// Set Mail sender (From) String sender_add = sender_address; ….. …… msg.setFrom( new InternetAddress(sender_add, sender_address,"UTF-8" ) );
2)附件中文乱码
1010行:将files.setFileName( file.getName().getBaseName() );
改成 :
BASE64Encoder enc = new BASE64Encoder(); String fileName="=?UTF-8?B?"+enc.encode(file.getName().getBaseName().getBytes("utf-8"))+"?="; files.setFileName( fileName);
3、C语言base64编解码 (源自:https://blog.csdn.net/u011491972/article/details/52800177)
base64码简介
百度词条
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。0. 源数据都是8位位宽的数据; 1. 相当于分组码,将源数据分为3个一组,每一组共24bits,采用每6位对应一个编码码字,那么3*8bits = 4*6its, 将3个数据映射成4个数据,由于编码的码字都是6位长度,换位10进制就是0-63,总共有64中可能性,这也是base64名字的来历; 2. 6bits对应10进制数对应的码字如最后的表;
C代码
编码#include <stdio.h> #include <string.h> // 全局常量定义 const char * base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; const char padding_char = '='; /*编码代码 * const unsigned char * sourcedata, 源数组 * char * base64 ,码字保存 */ int base64_encode(const unsigned char * sourcedata, char * base64) { int i=0, j=0; unsigned char trans_index=0; // 索引是8位,但是高两位都为0 const int datalength = strlen((const char*)sourcedata); for (; i < datalength; i += 3){ // 每三个一组,进行编码 // 要编码的数字的第一个 trans_index = ((sourcedata[i] >> 2) & 0x3f); base64[j++] = base64char[(int)trans_index]; // 第二个 trans_index = ((sourcedata[i] << 4) & 0x30); if (i + 1 < datalength){ trans_index |= ((sourcedata[i + 1] >> 4) & 0x0f); base64[j++] = base64char[(int)trans_index]; }else{ base64[j++] = base64char[(int)trans_index]; base64[j++] = padding_char; base64[j++] = padding_char; break; // 超出总长度,可以直接break } // 第三个 trans_index = ((sourcedata[i + 1] << 2) & 0x3c); if (i + 2 < datalength){ // 有的话需要编码2个 trans_index |= ((sourcedata[i + 2] >> 6) & 0x03); base64[j++] = base64char[(int)trans_index]; trans_index = sourcedata[i + 2] & 0x3f; base64[j++] = base64char[(int)trans_index]; } else{ base64[j++] = base64char[(int)trans_index]; base64[j++] = padding_char; break; } } base64[j] = '\0'; return 0; }
解码
包括两个函数:/** 在字符串中查询特定字符位置索引 * const char *str ,字符串 * char c,要查找的字符 */ inline int num_strchr(const char *str, char c) // { const char *pindex = strchr(str, c); if (NULL == pindex){ return -1; } return pindex - str; } /* 解码 * const char * base64 码字 * unsigned char * dedata, 解码恢复的数据 */ int base64_decode(const char * base64, unsigned char * dedata) { int i = 0, j=0; int trans[4] = {0,0,0,0}; for (;base64[i]!='\0';i+=4){ // 每四个一组,译码成三个字符 trans[0] = num_strchr(base64char, base64[i]); trans[1] = num_strchr(base64char, base64[i+1]); // 1/3 dedata[j++] = ((trans[0] << 2) & 0xfc) | ((trans[1]>>4) & 0x03); if (base64[i+2] == '='){ continue; } else{ trans[2] = num_strchr(base64char, base64[i + 2]); } // 2/3 dedata[j++] = ((trans[1] << 4) & 0xf0) | ((trans[2] >> 2) & 0x0f); if (base64[i + 3] == '='){ continue; } else{ trans[3] = num_strchr(base64char, base64[i + 3]); } // 3/3 dedata[j++] = ((trans[2] << 6) & 0xc0) | (trans[3] & 0x3f); } dedata[j] = '\0'; return 0; }
测试主函数:
// 测试 int main() { const unsigned char str[] = "a45rbcd"; const unsigned char *sourcedata = str ; char base64[128]; base64_encode(sourcedata, base64); printf("编码:%s\n",base64); char dedata[128]; base64_decode(base64, (unsigned char*)dedata); printf("译码:%s", dedata); getchar(); getchar(); return 0; }
我的解决过程:
根据方法1找到大概的解决思路,单独测试,不能解决!
结合方法1和方法2的思路,发现需要方法3来支持,综合一下,测试通过!代码逻辑:
原来的处理:char *output_file_name[1024] = {}; char input_file_name[1024] = "中文测试文件.zip"; sprintf(output_file_name, "%s", input_file_name); ... sendto(output_file_name);
解决后的处理:char *output_file_name[1024] = {}; char input_file_name[1024] = "测试.zip"; /* 添加base64编码 */ char base64[1024] = {} base64_encode(input_file_name, base64); /*使用方法1的函数*/ sprintf(output_file_name, "=?utf-8?B?%s?=", base64); /*注意别溢出了,最好使用strlcpy(output_file_name, 目标字符串, sizeof(output_file_name))*/ ... sendto(output_file_name);
-
java通过socket通讯发送excel文件到c#端,excel文件乱码
2013-07-29 15:15:23java端socket,发送excel文件字节流 public boolean sendExcel() { Socket socket; ServerSocket ss; DataOutputStream ps; byte[] sendBytes = null; try { ss = new ServerSocket(this.port)... -
log4j发送邮件乱码
2019-10-02 10:04:44以前开发的系统没有单独的日志管理,所有的日志统一输出到tomcat后台一个文件里,不几天就是好几G,现在要整体增加一个Log4J管理日志的功能,其实这方面的资料网上多的是。发邮件的配置说明也有,但是具体怎么发,... -
STM32CudeIDE:串口发送汉字乱码
2020-12-29 01:06:53用STM32CudeIDE建立一个工程,写了一个串口发送,发现:发送英文正常,但发送中文会乱码 这是中文编码格式不对需要设置一下,有两个地方需要设置一下,把编码方式改成GBK, 在文本文件编码哪里选中缺省值 选其他... -
interop.cdo 发送邮件乱码_java发送email邮件代码
2020-11-21 13:27:14主要调用javax.email包下面代码是向对应的qq邮箱发送文件。需要开通发送邮箱的授权码选择设置,选择账户然后下拉点击开启然后就可以发送短信获取对应的passwordpackage ... -
在CentOS7查看Windows发送txt文件出现乱码的问题
2020-02-01 17:15:55linux用的编码一般是:utf-8; windows的编码 一般是:gb18030或gb2312 ;...iconv -f gb18030 -t utf-8 HCIP1.txt(需要转码的文件) -o HCIP01.txt(转码后的文件名) iconv [OPTION…] [FILE…] -f, --from-... -
Java发送邮件乱码问题
2019-01-13 21:10:30在properties配置文件中配置了java mail的subject、content 和其他配置,只有这两个是包含中文 因为把properties文件设置成了utf-8,其他的也是这样设置。但是在接收的邮件中,中文都变成了这样。。。。。 点å... -
关于通过ajax发送请求下载csv文件双击乱码
2016-11-03 17:04:10在获取数据后,通过字符串的形式把数据返回给请求结果中,然后生成csv文件,右击编辑打开没有乱码,但是双击打开就是乱码,网上N多的设置utf8或者gbk编码格式,还有的说和服务器和客户端系统有关,但是按照他们说的... -
android 读取俄文csv乱码_了解字符编码,不再恐惧文件乱码
2021-01-04 22:44:20背景:工作上,不同部门经常需要共享文件,偶尔会出现打开文件出现的是一堆乱码,这时候... 目标:了解字符编码不再恐惧文件乱码1 常见乱码现象1.1 txt文件用UE打开是乱码1.2 csv文件用打开Excel打开是乱码1.3 命... -
解决python发送邮件乱码
2016-08-24 15:27:131.打开python的Lib文件夹下的 mimetypes.py 文件,找到大概256行的 ‘default_encoding = sys.getdefaultencoding()’。 在这行前面添加三行,并且注释4行代码 #try: # ctype = ctype.encode(default_encodin -
java如何发送邮件以及使用Velocity模板解决模板文件中文乱码的问题
2016-11-02 20:08:19问题1:中文乱码变成了????,坑啊。 问题2:除了警告文本之外,想加上一张图片但是使用项目中的图片时一直显示不出来,后来发现,接收方邮件回去邮箱服务器中取相对路径的图片资源,导致显示不了,于是指向了互联网... -
Linux解压压缩包后文件乱码
2021-04-08 19:32:49.zip的压缩包,解压到当前目录,进入解压后的文件夹,文件夹名称乱码: 原因: ... unzip命令的使用: ...解决mac上文档发送到windows系统下乱码的问题 ubuntu下如何解压rar文件 ubuntu解压zip文件 ... -
STM32串口打印printf发送中文乱码问题
2017-12-14 11:22:501、首先要确保使用keil程序正确编译,并且程序经过调试,已经可以正常发送英文字符,但是发送中文字符时乱码。 2、使用记事本打开main.c文件(或其他主程序),点击另存为,在右下方选择编码方式为ANSI,替换原文件... -
Window文件发送到linux下出现乱码:sed出征!
2018-06-08 14:40:16本次使用Python的模块进行window和linux的交互,在发送文件给linux时出现了乱码的问题。将里面内容修改一样也没用,设置编码?都是utf-8了,那么还有什么问题?除了编码,还有回车?! 这里window的文件的回车是\r\n... -
kafka配置文件 中文乱码_Log4j配置文件整理--Kafka日志发送
2020-12-23 21:39:23log4j.propertiesJava的爱好者们,一定对log4j是特别的熟悉,基本大多数项目都会选择log4j、slg4j来进行log记录。但是对于log4j....log4j配置文件的说明rootLogger说明rootLogger 指定log打印源,DEBUG为默认... -
phpmailer 类发送邮件乱码解决方法
2012-03-21 18:25:50最近做项目中遇到了phpmailer发送的邮件乱码问题,这个问题很好解决,之所以乱码,是因为编码没有统一,这里比如说我的项目文件都是GBK2312的格式,那么在email.func.php文件中加入这么一行代码:$mail->CharSet = ... -
【解决】JavaMailSender发送邮件附件:文件名乱码或者不显示文件格式问题
2021-02-04 16:45:31【解决】JavaMailSender发送邮件附件:文件名乱码或者不显示文件格式问题 解决重点 再创建 MimeMessageHelper 对象之前加上 System.getProperties().setProperty("mail.mime.splitlongparameters", "false"); 例子 ... -
STM32串口打印printf发送中文乱码问题(MDK)
2018-07-22 18:55:401、首先要确保使用keil程序正确编译,并且程序经过调试,已经可以正常发送英文字符,但是发送中文字符时乱码。 2、使用记事本打开main.c文件(或其他主程序),点击另存为,在右下方选择编码方式为ANSI,替换原文件... -
web项目:解决后台获取前端传的参数乱码问题,和后台发送数据乱码问题
2019-05-08 10:56:45获取的中文参数乱码: 一,get方式传参,中文乱码 ... 【Servers项目中去找server.xml文件,然后修改】 在修改端口的标签Connector中添加属性URIEncoding="XXX"(一般情况下,要么GBK,要么UTF-8) ... -
ansi编码_了解字符编码,不再恐惧文件乱码
2020-11-27 00:30:23背景:工作上,不同部门经常需要共享文件,偶尔会出现打开文件出现的是一堆乱码,这时候... 目标:了解字符编码不再恐惧文件乱码1 常见乱码现象1.1 txt文件用UE打开是乱码1.2 csv文件用打开Excel打开是乱码1.3 命... -
关于 MAC 下解压文件乱码的问题
2017-07-27 10:34:23问题来源使用 mac 的用户应该都碰见过这样的情况 : 好不容易找到压缩文件, 下载下来之后却发现解压出来的文件是乱码. 虽然一般来说, 文件里面的内容不会受到影, 但是认不出来文件的名字确实会带来很多困扰解决方案... -
导出CSV文件乱码问题
2012-07-27 10:29:01前几天在Android手机做了个导出CSV表格并发送邮件的应用,做完之后我在本机测试毫无问题,顺便说一下我用的是WPS打开的,但是之后同事用几个不同的终端测试就发现了问题,收到的邮件中标题和附近都为乱码。... -
ajax发送请求不能下载文件,浏览器输出乱码及解决方式
2019-09-29 16:01:10最近做导出excel文件,怎么写下载的时候都是在浏览器输出的码,然后就想到是不是ajax请求不能直接请求下载文件,果然是这样。 ajax不能请求下载文件的原因: 因为response原因,一般请求浏览器是会处理服务器输出... -
基于python发送邮件的乱码问题的解决办法
2020-12-19 14:15:39公司项目中需要通过后台发送邮件,邮件内容包括图片附件。如果通过PHPmailer发送...但是,在通过python发送邮件,却遇到了乱码的问题。在调试过程中出现了以下现象: 1、中文与英文字母结合出现乱码。 2、回复邮件人的