当前位置:  开发笔记 > 编程语言 > 正文

从Web检测区域设置(列表分隔符)

如何解决《从Web检测区域设置(列表分隔符)》经验,为你挑选了1个好方法。

在令人不快的意外之后,逗号分隔值(CSV)文件不一定以逗号分隔,我试图找出是否有任何方法可以从http请求检测客户端计算机上的区域设置列表分隔符值.

场景如下:用户可以从网站下载CSV格式的一些数据(RoR,如果重要的话).该CSV文件是即时生成的,发送给用户,并且大部分时间双击并在目的地的Windows机器上的MS Excel中打开.现在,如果用户将','设置为列表分隔符,则数据将按列正确排列,但如果设置了任何其他分隔符(此处广泛使用';'),则只会将其抛入单个列中.那么,有没有办法检测客户端计算机上使用的分隔符,并相应地生成文件?

我有一种下沉的感觉,它不是,但我想确定在我通过'无法完成,对不起'线给客户之前:)



1> MB...:

这是我刚刚根据此处显示的方法编写的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 Locales,似乎默认列表分隔符实际上总是','或';'.对于某些语言环境,"控制面板"中的下拉列表提供了两种选项; 对于其他人,它只提供','.一个区域设置,Divehi,有一个奇怪的字符,我之前没有看到它作为列表分隔符,并且,对于任何区域设置,用户可以输入他们想要的任何字符串作为列表分隔符.

将随机字符串作为分隔符放在CSV文件中对我来说听起来很麻烦,所以我上面的函数只返回';' 或'.',它只会返回';' 如果它在Array.toLocaleString字符串中找不到','.我不完全确定array.toLocaleString是否具有跨浏览器保证的格式,因此indexOf检查而不是在特定索引处挑选一个字符.

使用Array.toLocaleString来获取列表分隔符适用于IE6,IE7和IE8,但不幸的是它似乎不适用于Firefox,Safari,Opera和Chrome(或至少我的计算机上的那些浏览器的版本):它们似乎都用逗号分隔数组项,而不管Windows"列表分隔符"设置如何.

另外值得注意的是,默认情况下Excel在解析CSV文件中的数字时似乎使用系统"小数分隔符".育.因此,如果您正在本地化列表分隔符,您可能也想要本地化小数分隔符.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有