V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kachni
V2EX  ›  问与答

使用 fs.writeFile 保存文件乱码

  •  
  •   kachni · 2014-11-16 10:16:11 +08:00 · 6677 次点击
    这是一个创建于 3650 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我准备用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
    已经好几天了没找到办法,谷歌也没发现有这样的解决方法
    6 条回复    2014-11-17 08:04:21 +08:00
    aaaa007cn
        1
    aaaa007cn  
       2014-11-16 21:01:17 +08:00
    fs.writeFile 默认使用 utf-8 编码
    我不用 everedit,不了解具体情况
    但从 everedit 状态栏显示来猜测
    everedit 是用 ansi 去解码的
    手动设置一下 everedit 的编码?
    或者在浏览器中打开 test.txt 并且设置编码为 utf-8
    kachni
        2
    kachni  
    OP
       2014-11-16 22:18:43 +08:00
    @aaaa007cn 我也试过everedit指定编码为utf8重读,但是没效果。utf16倒是不会乱码,可是却会少掉几个字。。。
    aaaa007cn
        3
    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
        4
    kachni  
    OP
       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
        5
    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
        6
    kachni  
    OP
       2014-11-17 08:04:21 +08:00 via iPhone
    @aaaa007cn 原来是这个问题!多谢了,让我郁闷了好久
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3537 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 109ms · UTC 04:49 · PVG 12:49 · LAX 20:49 · JFK 23:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.