【发布时间】:2017-03-10 09:51:32
【问题描述】:
我一直在尝试使用 Firefox v52 读取 UTF-16 文件的内容:
$.ajax({
type: "GET",
url: "downloads/dg_mare_piwik_social.csv",
dataType: "text",
success: function(data) {
// Split the lines
var lines = data.split('\n');
for (var i = 1, len = lines.length; i < len; ++i) {
var items = lines[i].split(',');
console.log(items[0], Number.parseFloat(items[1]));
}
});
问题是在控制台中我从parseFloat(items[1]) 得到NaN。
这只发生在 Firefox 中,所有其他浏览器都会得到这个数字。
我怎样才能让它工作?如何从 UTF-16 字符串中获取数字?
【问题讨论】:
-
items[1]的原始值是多少? -
问题不在于 JavaScript 层,而在于 JavaScript 之前。最有可能的是,文件以一种方式编码(例如,UTF-16),但服务器响应说它以另一种方式(例如,UTF-8)编码,因此数据在到达 JavaScript 时已损坏。
-
请注意,当您处理 JavaScript 字符串时,it's always UTF-16(但允许使用无效的代理对),无论它是如何开始的。
-
items[1] 的原始值是纯数字,但是使用我上面提到的方法,我在 Firefox 中得到它,在尝试转换字符串时,数字和 NaN 之间有一些奇怪的字符来编号。但是 T.J.你是对的。用 php fwrite 生成的文件是 UTF-16。添加这个解决了问题: beforeSend: function (data) { data.overrideMimeType('text/plain; charset=UTF-16'); },非常感谢,Nikos。
标签: javascript firefox utf-8 parsefloat