从JS读取的CSV文件上的平方问号标志

时间:2012-10-31 15:35:10

标签: javascript jquery unicode utf-8 non-ascii-characters

我正在阅读我的JS中的CSV文件,但带有重音(áó ...)的字符将被替换为黑色方形问号(

我总是在PHP中遇到这类问题,但是,我正在使用JS,我不知道如何解决这个问题。

问题出在HTML文件的UTF8编码中,有没有办法在代码中解决这个问题?

由于

1 个答案:

答案 0 :(得分:3)

此字符为U + FFFD,REPLACEMENT CHARACTER,通常用于替换被认为是某种Unicode编码的流中的无效数据。

例如,如果您将文本“Résumé”编码为IS0 8859-1并想将其转换为UTF-16,但是告诉转换例程该文本是UTF-8那么该库可能会生成UTF- 16文本“R sum ”(另一种选择是抛出错误而不给出任何结果)。

这些可能出现的另一种方式是,如果网页声明它是UTF-8但实际上不是UTF-8。浏览器可能会执行上述重新编码,替换字符将显示在呈现的网页中,但使用忽略或忽略HTML编码信息的编辑器查看源将正确显示字符。

从您的评论中看起来您的流程类似于:

Excel - >导出到csv - >在js中处理csv - >生成HTML

Windows软件通常使用平台的“非Unicode程序编码”来编码8位文本,而不是UTF-8。所以CSV文件可能是Windows CP1252(如果您使用的是为西方世界大多数人设置的Windows版本),并且如果您的javascript程序正在读取该数据并将其直接复制到应该是UTF的HTML源代码中8,这会导致符合您描述的问题。

您需要做什么将CSV使用的编码转换为UTF-8。 Javascript实际上并没有这样做的设施,所以你最好的选择可能是在从Excel导出文件之后但在用JS访问它之前转换文件。

其他替代方法是将HTML页面使用的编码更改为csv使用的任何内容,或者不指定编码并将其留给浏览器进行猜测。