Определение региональных настроек (разделитель списков) из Интернета

После неприятного удивления, что файлы с разделенными запятыми значениями (CSV) не обязательно разделяются запятыми, я пытаюсь выяснить, существует ли какой-либо способ определения значения разделителя списка региональных настроек на клиентском компьютере из запроса http.

Сценарий выглядит следующим образом: пользователь может загрузить некоторые данные в формате CSV с веб-сайта (RoR, если это имеет значение). Этот CSV-файл создается на лету, отправляется пользователю и в большинстве случаев дважды щелкается мышью и открывается в MS Excel на компьютере Windows в месте назначения. Теперь, если у пользователя есть "," установить в качестве разделителя списка, данные должным образом упорядочены в столбцы, но если установлен любой другой разделитель («здесь широко используется»), все это просто отбрасывается в один столбец. Итак, есть ли способ определить, какой разделитель используется на клиентском компьютере, и сгенерировать файл соответствующим образом?

У меня тонущее чувство, что это не так, но я хотел бы быть уверен, прежде чем пройти «не может быть сделано», извините ». линия к клиенту :)

 the Tin Man14 дек. 2010 г., 03:20
Это тема, которая возникает в обсуждениях с участием человека. Лучший способ выяснить, что использовать, - попросить пользователя выбрать свое местоположение в предпочтении. Их машина может быть неправильно настроена, либо из-за невежества, либо из-за преднамеренного запутывания.

Ответы на вопрос(5)

позволяющая любому символу быть разделителем:

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

Просто установите любой символ (например, "#") в качестве разделителя списка в вашей ОС и попробуйте код, как указано выше. Соответствующий символ (то есть «#», если он задан как sugested) возвращается.

насколько я знаю, нет никакого способа достичь того, что вы после. Максимум, что вы можете сделать, это попытаться обнаружить языковой стандарт пользователя и сопоставить его с базой данных языковых стандартов / разделителей списков, в результате изменив разделитель списка в файле .CSV.

 14 дек. 2010 г., 03:15
Попытка прослушать информацию с компьютера пользователя очень подвержена ошибкам. Пользователи печально известны тем, что не устанавливают информацию о местоположении. Самый надежный способ узнать что-либо о пользователе - это объяснить, почему вы хотите знать, а затем попросить их выбрать подходящее значение.

х установить тип профиля, а затем сгенерировать CSV-файлы на основе пользовательских настроек, в которых по умолчанию используются запятые?

Решение Вопроса

которое я только что написал на основе показанного методаВот:

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, и кажется, что разделитель списка по умолчанию практически всегда либо "," или ';' Для некоторых локалей раскрывающийся список на панели управления предлагает оба варианта; для других он предлагает просто ",". Одна локаль, Divehi, имеет странный символ, который я раньше не видел в качестве разделителя списка, и для любой локали пользователь может ввести любую строку, которую он хочет, в качестве разделителя списка.

Размещение случайных строк в качестве разделителя в CSV-файле звучит для меня как проблема, поэтому моя функция, приведенная выше, будет возвращать только a & apos ;; & apos; или ".", и он будет возвращать только ";" если он не может "найти", " в строке Array.toLocaleString. Я не совсем уверен относительно того, имеет ли array.toLocaleString формат, который гарантирован для всех браузеров, поэтому indexOf проверяет, а не выбирает символ с определенным индексом.

Использование Array.toLocaleString для получения разделителя списка работает в IE6, IE7 и IE8, но, к сожалению, он не работает в Firefox, Safari, Opera и Chrome (или, по крайней мере, в версиях этих браузеров на моем компьютере): кажется, что все они разделяют элементы массива запятой независимо от «разделителя списка» в Windows. установка.

Также стоит отметить, что по умолчанию Excel использует системный «десятичный разделитель». когда он анализирует числа из файлов CSV. ЮК. Таким образом, если вы локализуете разделитель списка, вы можете также захотеть локализовать десятичный разделитель.

что все должны использовать Calc из OpenOffice - он спрашивает, когда вы открываете файл о кодировке, разделители столбцов и прочее. Я не знаю ответа на ваш вопрос, но, возможно, вы можете попытаться отправить данные в HTML-таблицах или в XML-формате - Excel должен правильно их прочитать. Из моего опыта нелегко экспортировать данные в Excel. Несколько недель назад у меня возникла проблема с этим, и после нескольких часов работы я спросил человека, который не смог открыть мой CSV-файл в Excel, о версии. Это был Excel 98 ...

Посмотрите наПример HTML а такжеXML.

Ваш ответ на вопрос