起因:
通过接口拿到一个带有 \r
字符的文本,然后通过赋值到ejs的文本里,再通过fs.readFileSync
读出来,调用nodemailer
发送到QQ邮箱,然后在邮件里看到了带=E5
, =
, =E9
诸如此类的特殊字符。
经过:
- 打印出
fs.readFileSync
,再fs.writeFileSync
到本地文件,看到了^M
- 一开始以为是接口乱码导致了,拼命的改编码,用了
iconv
的类库。结果【x】 - 观察到在
linux
的控制台输出是正常的,就想着先存一份到本地,再读本地的文件。结果【x】 - 观察到打印的接口输出里一直包含着
\r
字符,尝试用replace
方法移除。结果【✔】
文本展示
- 在qq邮件里的展示效果
再见,布诺太太,我得走了,我女儿明天结婚,我今天还有好多好多工作要做。 =E5 ,那小伙子还在抵抗?
- 在本地文件的展示效果
再见,布诺太太,我得走了,我女儿明天结婚,我今天还有好多好多工作。^M嗯,那小伙子还在抵抗?
- 在接口里的展示效果
再见,布诺太太,我得走了,我女儿明天结婚,我今天还有好多好多工作。\r嗯,那小伙子还在抵抗?
实现代码
html.replace(/[\r]/g, "");
感想
- 惯性思考,一有问题就找百度,百度后都是一堆的
dos2unix
转,以及vim下的%s/^M$//g
- 期间也直接就是
拿来主义,
readFileSync跟
readFile`函数没查清楚,就直接套 - 测试不全面,使用
spark
跟qq邮箱
,在spark
上没这个问题,在qq
邮箱有
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。