这是我刚刚根据此处显示的方法编写的 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 中,然后您可以从服务器中检测到该 cookie。
我检查了所有的 Windows 语言环境,似乎默认的列表分隔符几乎总是“,”或“;”。对于某些语言环境,控制面板中的下拉列表提供了两个选项;对于其他人,它只提供','。一种语言环境 Divehi 有一个我以前从未见过的奇怪字符作为列表分隔符,并且对于任何语言环境,用户都可以输入他们想要的任何字符串作为列表分隔符。
将随机字符串作为 CSV 文件中的分隔符对我来说听起来很麻烦,所以我上面的函数只会返回一个 ';' 或一个'.',它只会返回一个';' 如果在 Array.toLocaleString 字符串中找不到“,”。我不完全确定 array.toLocaleString 是否具有跨浏览器保证的格式,因此 indexOf 检查而不是在特定索引处挑选字符。
使用 Array.toLocaleString 获取列表分隔符适用于 IE6、IE7 和 IE8,但不幸的是,它似乎不适用于 Firefox、Safari、Opera 和 Chrome(或者至少是我计算机上的这些浏览器的版本):无论 Windows 的“列表分隔符”设置如何,它们似乎都用逗号分隔数组项。
另外值得注意的是,默认情况下,Excel 在解析 CSV 文件中的数字时似乎使用系统“小数分隔符”。玉。因此,如果您要本地化列表分隔符,您可能还需要本地化小数点分隔符。