使用Javascript读取UTF-16文件
Read UTF-16 file with Javascript
我有一个UTF-16编码的文件
$ file myFile.csv
myFile.csv: Little-endian UTF-16 Unicode text, with CRLF line terminators
但是当我用JavaScript打开它时使用下面的代码
var http = new XMLHttpRequest();
http.open( "GET", url, false );
http.send( null );
var csv = http.responseText;
结果csv
变量被解释为文件是UTF-8格式的。
结果如下:
[10:58:19.294] "��D'x00a'x00t'x00e'x00_'x001'x00,'x00S'x00y'x00s'x00t'x00e'x00m'x00_'x00S'x00t'x00a'x00t'x00e'x00,'x00S'x00t'x00a'x00t'x00e'x00_'x00C'x00h'x00a'x00n'x00g'x00e'x00_'x00C'x00o'x00u'x00n'x00t'x00_'x002'x00'r'x00'n'x001'x00/'x002'x00/'x002'x000'x001'x002'x00,'x00C'x00l'x00o'x00s'x00e'x00d'x00,'x001'x005'x00'r'x00'n'x001'x00/'x002'x00/'x002'x000'x001'x002'x00,'x00N'x00e'x00w'x00,'x001'x008'x00'r'x00'n'x001'x00/'x002'x00/'x002'x000'x001'x002'x00,'x00R'x00e'x00s'x00o'x00l'x00v'x00e'x00d'x00,'x003'x00'r'x00'n'x001'x00/'x003'x00/'x002'x000'x001'x002'x00,'x00D'x00e'x00f'x00e'x00r'x00r'x00e'x00d'x00,'x001'x00'r'x00'n'x001'x00/'x003'x00/'x002'x000'x001'x002'x00,'x00N'x00e'x00w'x00,'x006'x00'r'x00'n'x001'x00/'x003'x00/'x002'x000'x001'x002'x00,'x00R'x00e'x00s'x00o'x00l'x00v'x00e'x00d'x00,'x001'x00'r'x00'n'x001'x00/'x003'x00/'x002'x000'x001'x002'x00,'x00V'x00e'x00r'x00i'x00f'x00i'x00e'x00d'x00,'x009'x00'r'x00'n" […]
每一个其他字符都是NUL字符(表示为'x00),因此它会打乱所有进一步的字符计数和解析。前两个字符是"替换"字符,因为在实际文件中,前16位表示"小端UTF-16 BOM",这会导致UTF-8中的非法字符。
当我以HEX格式查看文件时,我有以下第一行:
0000000: fffe 4400 6100 7400 6500 5f00 3100 2c00 ..D.a.t.e._.1.,.
0000010: 5300 7900 7300 7400 6500 6d00 5f00 5300 S.y.s.t.e.m._.S.
0000020: 7400 6100 7400 6500 2c00 5300 7400 6100 t.a.t.e.,.S.t.a.
0000030: 7400 6500 5f00 4300 6800 6100 6e00 6700 t.e._.C.h.a.n.g.
0000040: 6500 5f00 4300 6f00 7500 6e00 7400 5f00 e._.C.o.u.n.t._.
0000050: 3200 0d00 0a00 3100 2f00 3200 2f00 3200 2.....1./.2./.2.
0000060: 3000 3100 3200 2c00 4300 6c00 6f00 7300 0.1.2.,.C.l.o.s.
0000070: 6500 6400 2c00 3100 3500 0d00 0a00 3100 e.d.,.1.5.....1.
0000080: 2f00 3200 2f00 3200 3000 3100 3200 2c00 /.2./.2.0.1.2.,.
0000090: 4e00 6500 7700 2c00 3100 3800 0d00 0a00 N.e.w.,.1.8.....
我想知道为什么它不将文件解释为UTF-16(因为它以正确的BOM开头),以及是否有任何方法可以更改它。它应该能够以某种方式自动确定格式(因此也可以与UTF-8以及其他常见的如ASCII和ANSI一起工作)。
为了测试库,我使用XMLHttpRequest读取文件,但在部署的库中,它应该通过JAvascript FileReader API读取文件。这有什么区别吗?
我在Linux (Firefox和Chrome)和Windows (Firefox)上测试了它,所以它似乎与浏览器和操作系统无关。
您检查了setRequestHeader方法吗?我认为您应该能够指定内容类型。另外,我怀疑浏览器会接收到这个特定的细节。
引导我这样做的(至少部分地)是本页上的第一个例子
我希望这对你有帮助!
相关文章:
- 可以't导入更少的UTF-8 BOM编码的文件
- Dart web服务器应该对所有内容使用UTF-16编码吗
- NetBeans IDE CoffeeScript 将 UTF-8 BOM 添加到输出文件中
- 如何使用 PHP 将 utf-8 编码的 json 保存到.txt文件中
- Javascript将文本区域保存为UTF-8格式的文件
- jQuery.ajax模拟POST文件上传,不发送UTF-8内容
- 如何将utf-16缓冲区与字符串进行比较
- 在javascript文件中使用utf-8
- 如何使用recorder.js将音频文件质量更改为16位、立体声8000 Hz
- 使用Javascript从外部文件读取UTF-8特殊字符
- execCommand在ie中使用USC-2小端编码保存csv文件,如何使用UTF-8格式保存
- 将字符串转换为UTF-16(以及更多格式化)
- 节点编码和解码utf-16缓冲区
- Javascript:创建UTF-16文本文件
- Android -允许XMLHttpRequest在API级别上访问本地文件;16
- 在javascript中将字符串编码为utf-16到base64
- 使用Javascript读取UTF-16文件
- 如何使用JavaScript注释让vadin以UTF-8格式加载JS文件?
- 从UTF-16字符串中获取意外EOF
- utf 8 - JavaScript 中的 UTF-16 到 UTF-8 转换