繁体   English   中英

Javascript:将CSV字符串转换为a)UTF-8和b)2D数组

[英]Javascript: convert CSV string into a) UTF-8 and b) a 2D array

两个问题合二为一,不确定是否允许,但它们与同一代码直接相关。 我使用Javascript检索了一个CSV字符串作为HTTP响应-该字符串似乎采用UTF-16编码,因为它具有例如“—而不是“€”。

a)如何在原始Javascript中将其转换为UTF-8?

完成后,如何b)将多行CSV转换为原始Javascript中的2D数组?

谢谢!


[更新]

基于anqooqie的指针,我采用以下方法对字符串进行重新编码:

好吧,很清楚-坦白地说,我采用了稍微不同的方式(因为reencode函数对我不起作用,并且抛出了通用错误代码),现在执行以下操作;

var O = new ActiveXObject('ADODB.Stream');
O.Type = 2; 
O.Open;
O.Charset = 'ISO-8859-1';
O.LineSeparator = 10;
O.WriteText (csvStr);
O.Position = 0;
O.Charset = 'UTF-8';

而且效果很好,几乎可以瞬间(即使它是35,000行CSV)。 现在,如果我想把它放回csvStr中,我会做

csvStr = O.ReadText

但这需要花很长时间-这是预期的还是我做错了什么?

为了将其放入2D数组中,我在LineSeparator上进行了拆分,然后使用正则表达式进行了循环,这似乎可行。

var A = new Array
A.push(csvStr[0].match(/"[^"]*"|[^,]+/g))

readText的巨大延迟使我感到困扰,特别是WriteText是如此之快。 任何帮助表示赞赏。

您似乎对字符编码的术语感到困惑,所以让我们再次确认一下。

字符串只是一个字符串。 没有“ UTF-16字符串”或“ UTF-8字符串”。

字符编码是一种在字符串和字节数组之间转换的协议。 UTF-16是字符编码之一。 同样,UTF-8和ISO-8859-1都是字符编码。 在UTF-16中,字符串'€'可以编码为字节数组20 AC 在UTF-8中,字符串'€'可以编码为字节数组E2 82 AC 在ISO-8859-1中,字节数组E2 82 AC可以解码为字符串'â¬'

现在,您可能会发现'â¬'不是“ UTF-16字符串”。 它以'€'编码为UTF-8,并错误地解码为ISO-8859-1。

a)如何在原始Javascript中将其转换为UTF-8?

您应该做的是修复代码以检索CSV文件。 因为我不知道您的代码,所以我无法告诉您如何解决它,但是我相信它现在可以将CSV文件解码为ISO-8859-1。 您应该将字符编码从ISO-8859-1修复为UTF-8。

如果该代码不是您的代码,并且无法修复,则可以使用解决方法。 换句话说,您可以1)将错误解码的字符串重新编码为ISO-8859-1,以及2)将其重新解码为UTF-8。

1)

// Note: This code requires ES5 or later.
function reencode(inputString) {
  return Array.apply(null, Array(inputString.length)).map(function (x, i) { return inputString.charCodeAt(i); });
}

2)

看到这个答案

b)如何在原始Javascript中将多行CSV转换为2D数组?

看到这个答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM