Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从web检测区域设置(列表分隔符)_Ruby On Rails_Ruby_Regional - Fatal编程技术网

Ruby on rails 从web检测区域设置(列表分隔符)

Ruby on rails 从web检测区域设置(列表分隔符),ruby-on-rails,ruby,regional,Ruby On Rails,Ruby,Regional,令人不快的是,逗号分隔值(CSV)文件不一定是逗号分隔的,在此之后,我试图找出是否有任何方法可以从http请求检测客户端计算机上的区域设置列表分隔值 场景如下:用户可以从网站下载一些CSV格式的数据(RoR,如果有关系的话)。该CSV文件是动态生成的,发送给用户,大多数情况下双击并在目标计算机的Windows计算机上以MS Excel打开。现在,如果用户将“,”设置为列表分隔符,那么数据将正确地排列在列中,但是如果设置了任何其他分隔符(“;”,在这里被广泛使用),那么所有这些都将被抛出到单个列中

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

场景如下:用户可以从网站下载一些CSV格式的数据(RoR,如果有关系的话)。该CSV文件是动态生成的,发送给用户,大多数情况下双击并在目标计算机的Windows计算机上以MS Excel打开。现在,如果用户将“,”设置为列表分隔符,那么数据将正确地排列在列中,但是如果设置了任何其他分隔符(“;”,在这里被广泛使用),那么所有这些都将被抛出到单个列中。那么,有没有办法检测客户端机器上使用了什么分隔符,并相应地生成文件


我有一种令人沮丧的感觉,它不是,但在我向客户传递“无法完成,抱歉”行之前,我想确定一下:)

你能让使用非逗号分隔符的用户设置一个配置文件类型的选项,然后根据用户设置生成CSV,默认为逗号吗?

Toms,就我所知,没有办法实现你的目标。您最多只能尝试检测用户区域设置,并将其映射到区域设置/列表分隔符数据库,从而更改.CSV文件中的列表分隔符。

我认为每个人都应该使用OpenOffice中的Calc-当您打开一个关于编码、列分隔符和其他内容的文件时,它会询问您。我不知道您的问题的答案,但也许您可以尝试以html表格或xml格式发送数据—excel应该正确读取这两种格式。根据我的经验,将数据导出到excel并不容易。几周前,我遇到了这个问题,工作了几个小时后,我问了一个人,他无法在excel中打开我的csv文件,关于这个版本。那是Excel 98


看一看和。

这是我刚刚根据所示方法编写的JavaScript解决方案:

键位于使用系统列表分隔符的toLocalString()方法中

您可以使用JavaScript获取列表分隔符,并将其设置在cookie中,然后从服务器检测到该cookie

我检查了所有Windows区域设置,似乎默认的列表分隔符实际上总是“,”或“;”。对于某些地区,控制面板中的下拉列表提供了这两个选项;对其他人来说,它只提供了“,”。一个区域设置Divehi有一个我以前没有见过的奇怪字符作为列表分隔符,对于任何区域设置,用户都可以输入他们想要的任何字符串作为列表分隔符

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

使用Array.toLocaleString获取列表分隔符在IE6、IE7和IE8上有效,但不幸的是,它在Firefox、Safari、Opera和Chrome(或至少在我的计算机上的浏览器版本)上似乎不起作用:它们似乎都用逗号分隔数组项,而与Windows的“列表分隔符”设置无关


还值得注意的是,默认情况下,Excel在解析CSV文件中的数字时似乎使用了系统“十进制分隔符”。大笑。因此,如果要本地化列表分隔符,可能还需要本地化十进制分隔符。

更简单版本的getListSeparator函数,允许任何字符作为分隔符:

function getListSeparator_bis()
{
    var list = ['a', 'b'];
    return(list.toLocaleString().charAt(1));
}// getListSeparator_bis

只需在操作系统中将任何字符(f.e.#')设置为列表分隔符,然后尝试上面的代码。将返回相应的字符(即,如果设置为sugested,则返回“#”)。

尝试从用户的计算机嗅探信息非常容易出错。用户因为没有设置位置信息而臭名昭著。要了解用户的任何信息,最简单的方法是解释您想知道的原因,然后让他们选择适当的值。这是人机界面讨论中提到的主题。确定要使用什么的最佳方法是让用户在首选项中选择他们的位置。他们的机器可能由于无知或故意混淆而被错误配置。我会投票支持它,因为这是一个聪明的解决方案。但在我的例子中,浏览器的列表分隔符与操作系统的不同=/另一种解决方案是定义文件的分隔符:在CSV文件的第一行中,列标题上方添加“SEP=,”。它将强制Excel使用“,”作为分隔符进行读取。
function getListSeparator_bis()
{
    var list = ['a', 'b'];
    return(list.toLocaleString().charAt(1));
}// getListSeparator_bis