使用 fs.writeFile 保存文件乱码

2014-11-16 10:16:11 +08:00
 kachni
我准备用node-webkit写一个markdown编辑器,可是保存的时候出了问题。
这个是例子
https://www.dropbox.com/s/prl7cv4ft5ma6qz/%E5%9B%BE%E5%83%8F%20001.png?dl=0
保存为txt乱码
https://www.dropbox.com/s/t316m3tqokao6mx/%E5%9B%BE%E5%83%8F%20002.png?dl=0
使用makdown.js后保存的html文件正常
https://www.dropbox.com/s/7geqftgsy86dqk2/%E5%9B%BE%E5%83%8F%20003.png?dl=0
已经好几天了没找到办法,谷歌也没发现有这样的解决方法
6567 次点击
所在节点    问与答
6 条回复
aaaa007cn
2014-11-16 21:01:17 +08:00
fs.writeFile 默认使用 utf-8 编码
我不用 everedit,不了解具体情况
但从 everedit 状态栏显示来猜测
everedit 是用 ansi 去解码的
手动设置一下 everedit 的编码?
或者在浏览器中打开 test.txt 并且设置编码为 utf-8
kachni
2014-11-16 22:18:43 +08:00
@aaaa007cn 我也试过everedit指定编码为utf8重读,但是没效果。utf16倒是不会乱码,可是却会少掉几个字。。。
aaaa007cn
2014-11-16 22:36:34 +08:00
@kachni
额,之前没仔细看第一张图
fs.writeFile("../test.txt", words, "ascii");
这个是用 ascii 编码去写 test.txt 啊……
而 good.html 和 data.json 都指定了 utf-8
其实直接贴代码并上传 test.txt 样本这样比较容易找到问题
kachni
2014-11-16 23:09:51 +08:00
@aaaa007cn 想说明的有点多让我罗列下
1."ascii"是因为之前默认utf8没有用才换了看下有没有用
2.test.txt用的值是直接通过.val()获取的,所以其实跟good.html和data.json没关系。
代码贴上
https://www.dropbox.com/s/v0bn2hkxt3lc3eq/%E5%9B%BE%E5%83%8F%20004.png?dl=0
3.用notepad++默认utf8来读取文件,发现编码还是ANSI,怎么回事?我已经把上面的ascii改过来了。
4.test.txt样本如何上传。。。
aaaa007cn
2014-11-17 02:30:24 +08:00
发现问题了
我是用 nodejs 和 node webkit v0.8.6 测试的,都正常
直到我去试了 node webkit v0.11.0,结果和你的一样
翻了下,原来是半年前的已知 bug
https://github.com/rogerwang/node-webkit/issues/1669
所以你用的也是 0.8.6 之后版本的 node webkit?

光看代码奇怪为什么 test.txt 有错误,good.html、data.json 却没问题
所以我才提到 good.html、data.json
而且 fs.writeFile("test.txt", "# 测试\n## 测试", "ascii") 的结果和那堆乱码很类似
不过现在看来问题不在这里

贴代码用 gist、pastebin 之类比较好
或者也可以连 test.txt 一起打包丢 dropbox
不要直接贴屏幕截图……
kachni
2014-11-17 08:04:21 +08:00
@aaaa007cn 原来是这个问题!多谢了,让我郁闷了好久

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/146860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX