使用 Chrome 文件系统 API 时无法适应文件编码
Can't fit file encoding when working with Chrome File System API
我需要读取一个文件,其中包含一组在 ASCII 中移动了 65 位的符号 table。这意味着,对于我打算做的每个符号:
String.fromCharCode('¢'.charCodeAt(0)-65) // returns 'a'
但它根本不起作用。我已经请我的朋友使用 Python 输入相同的文件进行测试,他们得到了正确的结果。
当我尝试用 Chrome 文件系统做同样的工作时,它根本不起作用。
我无法找回预期的符号。我认为这是我的 encoding/charset 平台的问题,但我不知道是什么以及如何解决它。
我试过用其他编码打开文件:
var reader=new FileReader();
reader.readAsText(file, 'windows-1252'); // no success
reader.readAsText(file, 'ISO-8859-2'); // no success
感谢任何帮助
问题是,根据 readAsText
标准,您的移动文本不再是 text。尝试使用任何标准代码页阅读它是行不通的。
您应该使用 readAsArrayBuffer()
, interpret it as unsigned 8-bit int array, shift the bytes, and then 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);
我需要读取一个文件,其中包含一组在 ASCII 中移动了 65 位的符号 table。这意味着,对于我打算做的每个符号:
String.fromCharCode('¢'.charCodeAt(0)-65) // returns 'a'
但它根本不起作用。我已经请我的朋友使用 Python 输入相同的文件进行测试,他们得到了正确的结果。
当我尝试用 Chrome 文件系统做同样的工作时,它根本不起作用。 我无法找回预期的符号。我认为这是我的 encoding/charset 平台的问题,但我不知道是什么以及如何解决它。
我试过用其他编码打开文件:
var reader=new FileReader();
reader.readAsText(file, 'windows-1252'); // no success
reader.readAsText(file, 'ISO-8859-2'); // no success
感谢任何帮助
问题是,根据 readAsText
标准,您的移动文本不再是 text。尝试使用任何标准代码页阅读它是行不通的。
您应该使用 readAsArrayBuffer()
, interpret it as unsigned 8-bit int array, shift the bytes, and then 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);