【问题标题】:Can't fit file encoding when working with Chrome File System API使用 Chrome 文件系统 API 时无法适应文件编码
【发布时间】:2016-06-17 15:09:40
【问题描述】:

我需要读取一个文件,其中包含一组在 ASCII 表中移动了 65 位的符号。这意味着,对于我要执行的每个符号:

String.fromCharCode('¢'.charCodeAt(0)-65) // returns 'a'

但它根本不起作用。我已经让我的朋友使用 Python 输入相同的文件进行测试,他们得到了正确的结果。

当我尝试用 Chrome 文件系统做同样的工作时,它根本不起作用。 我无法取回预期的符号。我认为这是我的编码/字符集平台的问题,但我不知道是什么以及如何解决它。

我试过用其他编码打开文件:

var reader=new FileReader();

reader.readAsText(file, 'windows-1252'); // no success
reader.readAsText(file, 'ISO-8859-2'); // no success

感谢任何帮助

【问题讨论】:

    标签: javascript google-chrome-app html5-filesystem


    【解决方案1】:

    问题是,按照readAsText 标准,您的移动文本不再是文本。尝试使用任何标准代码页读取它都行不通。

    您应该使用 readAsArrayBuffer() 将文件读取为二进制文件,将其解释为无符号 8 位 int 数组,移位字节,然后使用 convert the result to string

    var buf = new Uint8Array(reader.readAsArrayBuffer(file));
    buf = buf.map((byte) => byte-65);
    var string = new TextDecoder("ascii").decode(buf);
    

    【讨论】:

    • 谢谢Xan,我会试试的
    • Xan,我是否应该在写入文件时也这样做?
    • 我想你可以反过来做类似的事情(使用 TextEncoder)。
    • 它似乎可以与 TextEncoder 一起使用,但是当我尝试输入在 readAsArrayBuffer 建议算法中获得的文件内容时,它会带来一个带有代码 129 的字符,并附有我的字母。
    猜你喜欢
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多