2009-06-18 1 views
4

쉼표로 구분 된 값 (CSV) 파일이 쉼표로 구분되어 있지 않은 것을 알게 된 후 불편을 겪은 후 지역별 설정을 감지 할 수있는 방법이 있는지 알아 내려고합니다. 목록 구분자 값은 http 요청으로부터 클라이언트 시스템에 있습니다.웹에서 국가 별 설정 검색 (목록 구분 기호)

시나리오는 다음과 같습니다. 사용자는 웹 사이트 (RoR, 중요한 경우)에서 CSV 형식으로 일부 데이터를 다운로드 할 수 있습니다. 그 CSV 파일은 즉석에서 생성되어 사용자에게 보내지고 대부분의 시간은 대상에서 Windows 컴퓨터의 MS Excel에서 두 번 클릭하여 열립니다. 이제 사용자가 목록 구분 기호로 ','를 설정하면 데이터가 열에 올바르게 정렬되지만 다른 구분 기호 (';'가 널리 사용됨)가 설정되면 모두 단일 열로 스핀됩니다. 그래서, 어떤 구분 기호가 클라이언트 컴퓨터에서 사용되는 감지하고 그에 따라 파일을 생성 할 수 있습니까?

나는 그렇지 않은 느낌 침몰,하지만 고객 :

+1

이것은 휴먼 인터페이스 토론에서 다루는 주제입니다. 무엇을 사용하는지 알아내는 가장 좋은 방법은 환경 설정에서 자신의 위치를 ​​선택하도록 사용자에게 요청하는 것입니다. 그들의 기계는 무지 또는 의도적으로 난독 화를 통해 잘못 구성된 것일 수 있습니다. –

답변

6

여기서 I는 단지 here 도시 된 방법에 따라 작성한 자바 스크립트 해결책 :

function getListSeparator() { 
    var list = ['a', 'b'], str; 
    if (list.toLocaleString) { 
     str = list.toLocaleString(); 
     if (str.indexOf(';') > 0 && str.indexOf(',') == -1) { 
      return ';'; 
     } 
    } 
    return ','; 
} 

키 시스템 목록 분리기를 사용 toLocaleString() 메소드이다.

목록 분리 기호를 가져와 서버에서 검색 할 수있는 쿠키로 설정할 때 JavaScript를 사용할 수 있습니다.

모든 Windows 로캘을 검사했는데 기본 목록 구분 기호가 거의 항상 ','또는 ';'인 것으로 보입니다. 일부 로켈의 경우 제어판의 드롭 다운 목록에 두 가지 옵션이 있습니다. 다른 사람들에게 그것은 단지 ','을 제공합니다. 한 로케일 인 Divehi에는 이전에 목록 분리 자로 보지 못한 이상한 문자가 있으며 모든 로케일에 대해 사용자가 원하는 목록을 구분 기호로 입력 할 수 있습니다.

임의의 문자열을 CSV 파일에 구분 기호로 넣으면 나에게 문제가되는 것처럼 들리므로 위의 함수는 ';'만 반환합니다. 또는 '.'을 반환하고 ';'만 반환합니다. Array.toLocaleString 문자열에서 ','을 찾을 수없는 경우 array.toLocaleString이 여러 브라우저에서 사용할 수있는 형식을 가지고 있는지 확실하지는 않습니다. 따라서 indexOf는 특정 인덱스에서 문자를 선택하지 않고 검사합니다.

배열 사용.toLocaleString을 사용하면 IE6, IE7 및 IE8에서 목록 구분 기호가 작동하지만 불행히도 Firefox, Safari, Opera 및 Chrome (또는 적어도 내 컴퓨터의 해당 브라우저 버전)에서는 작동하지 않는 것 같습니다. Windows "목록 구분 기호"설정에 관계없이 배열 항목을 쉼표로 구분합니다.

또한 기본적으로 Excel에서는 CSV 파일의 숫자를 구문 분석 할 때 "소수점 구분 기호"시스템을 사용하는 것으로 나타났습니다. 수다. 따라서 목록 구분 기호를 지역화하는 경우에도 소수 구분 기호를 현지화해야 할 수 있습니다. 구분 기호로 모든 문자를 가능하게

0

에 '할 수없는, 죄송합니다'라인을 통과하기 전에 내가 확인하고 싶습니다 그냥이 수 한 쉼표가 아닌 구분자가있는 사용자는 프로필 종류의 옵션을 설정 한 다음 사용자 설정에 따라 기본값이 쉼표 인 CSV를 생성합니까?

0

톰스, 내가 아는 한 당신이 겪은 것을 성취 할 수있는 방법이 없습니다. 가장 많이 할 수있는 것은 사용자 로케일을 감지하고 로케일/목록 구분 기호의 데이터베이스에 매핑하여 결과로 .CSV 파일의 목록 구분 기호를 변경하는 것입니다.

+0

사용자 컴퓨터에서 정보를 스니핑하려고하면 오류가 발생하기 쉽습니다. 사용자는 위치 정보를 설정하지 않은 것으로 유명합니다. 사용자에 대해 무엇이든 찾을 수있는 가장 확실한 방법은 사용자가 알고 싶은 이유를 설명하고 적절한 값을 선택하도록 요청하는 것입니다. –

1

누구나 OpenOffice에서 Calc를 사용해야한다고 생각합니다. 인코딩, 열 구분 기호 및 기타 파일을 열 때 묻습니다. 귀하의 질문에 대한 답변을 모르겠지만 어쩌면 당신은 HTML 테이블이나 XML에서 데이터를 보내려고 할 수 있습니다 - 엑셀 둘 다 올바르게 읽어야합니다. 내 경험에 비추어 볼 때 데이터를 내보내는 것이 쉽지 않습니다. 몇 주 전에 문제가 생겼고 몇 시간 동안 일하면서 내 CSV 파일을 Excel에서 열 수없는 사람에게 버전에 대해 물어 보았습니다. 그것은 Excel 98이었습니다 ... 및 xml을보십시오.

0

getListSeparator 기능의 더 간단 버전 :

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

그냥 OS에서 목록 구분 기호 같은 문자 (f.e. '#')가 상기와 같이 코드를 시도 설정합니다. 적절한 문자 (sugested로 설정된 경우 '#')가 반환됩니다.