具有令人不快的意外的是逗号分隔值(CSV)文件不一定是逗号分隔之后,我试图找出是否有什么办法可以检测区域设置列表分隔值从http请求的客户端机器上的。
方案如下:用户可以从网站下载CSV格式的一些数据(回报率,如果它的事项)。 这CSV文件上的苍蝇,发送给用户产生的,大部分时间双击并在目的地在MS Excel中打开Windows机器上。 现在,如果用户有“”设置为列表分隔符,数据被妥善安排在列,但如果有其他的分隔符(‘;’在这里被广泛使用)设置,这一切只是被扔到一列。 那么,有没有什么办法来检测一下分离器的客户机上使用,并相应地生成文件?
我有一个下沉的感觉,这是没有,但我想,以确保之前,我通过“能不能做到,对不起”行客户:)
这里是一个JavaScript的解决方案,我只是根据所示的方法写在这里 :
function getListSeparator() {
var list = ['a', 'b'], str;
if (list.toLocaleString) {
str = list.toLocaleString();
if (str.indexOf(';') > 0 && str.indexOf(',') == -1) {
return ';';
}
}
return ',';
}
最关键的是在使用该系统列表分隔所述的toLocaleString()方法。
你可以使用JavaScript来获取列表分隔,并设置在一个cookie,然后您可以从您的服务器检测。
我检查了所有的Windows区域设置,它似乎是默认列表分隔符是几乎总是要么“”或‘;’。 对于一些语言环境中的控制面板中的下拉列表中提供了两个选项; 对其他人来说只是提供“”。 一个地区,迪维希,有我以前没有见过的列表分隔一个奇怪的角色,而且,对于任何区域,可以为用户输入他们想要作为列表分隔符的字符串。
把随机字符串作为一个CSV文件中的分隔符听起来麻烦我,所以我上面的功能将只返回一个“;” 或者,它只会返回一个“”‘;’ 如果它不能找到在Array.toLocaleString字符串“”。 我不能完全肯定array.toLocaleString是否有导致用户在浏览器的保证,因此检查的indexOf而不是在一个特定的指数挑选出一个字符的格式。
使用Array.toLocaleString获取列表分隔适用于IE6,IE7和IE8,但不幸的是它似乎并没有对火狐,Safari,Opera和Chrome浏览器(或至少在我的电脑上这些浏览器的版本):他们似乎都数组项用逗号分隔,无论Windows的“列表分隔符”的设置。
另外值得一提的是默认的Excel似乎当它解析号码的开出CSV文件中使用系统“小数点分隔符”。 育。 所以,如果你是本地化列表分隔你可能要本地化的小数点分隔符太。
我认为每个人都应该从OpenOffice的使用计算器 - 它要求当您打开一个关于编码,列分隔符和其他文件。 我不知道你的问题的答案,但也许你可以尝试在HTML表格或XML发送数据 - Excel中应正确读取他们两个。 从我的经验是不容易导出数据到Excel。 几个星期前,我与它的问题和工作几个小时后,我问一个人,谁也无法在Excel中打开我的csv文件,关于版本。 这是Excel的98 ...
采取一看HTML例子和XML 。
你可以只是用户与非逗号分隔符情景模式设置为一种选项,然后基于与默认的是逗号用户设置的CSV?
大卫 - 汤姆斯,据我所知是没有实现你追求的方式。 你可以做的最多的就是试图发现用户区域并将其映射针对的区域设置/列表分隔符的数据库,更改列表分隔的.csv文件的结果。
该simplier版本getListSeparator功能,使任何字符是一个分隔符:
function getListSeparator_bis()
{
var list = ['a', 'b'];
return(list.toLocaleString().charAt(1));
}// getListSeparator_bis
只需设置任何字符(FE“#”)作为列表分隔在您的操作系统,并尝试为上面的代码。 适当的字符(如“#”如果设置为sugested)返回。