加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 从Web检测区域设置(列表分隔符)

发布时间:2020-12-17 02:50:18 所属栏目:百科 来源:网络整理
导读:在令人不快的意外之后,逗号分隔值(CSV)文件不一定以逗号分隔,我试图找出是否有任何方法可以从http请求检测客户端计算机上的区域设置列表分隔符值. 场景如下:用户可以从网站下载CSV格式的一些数据(RoR,如果重要的话).该CSV文件是即时生成的,发送给用户,并且
在令人不快的意外之后,逗号分隔值(CSV)文件不一定以逗号分隔,我试图找出是否有任何方法可以从http请求检测客户端计算机上的区域设置列表分隔符值.

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

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

解决方法

这是我刚刚根据 here所示的方法编写的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文件中的数字时似乎使用系统“小数分隔符”.育.因此,如果您正在本地化列表分隔符,您可能也想要本地化小数分隔符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读