2009-12-23 5 views
3

유니 코드 데이터를 올바르게 처리 한 CSV (쉼표로 구분 된 값) 파서의 Java 구현을 찾고 있습니다. 중국어 텍스트가있는 UTF-8 CSV 파일 나는 같은 파서가 내부적으로 코드 포인트를 사용하여 관련 메소드를 반복하고 비교해야한다고 생각한다. Apache 2 라이센스 또는 이와 유사한 것이 가장 효과적이다.유니 코드 인식 CSV 파서 (Java)

+0

http://sourceforge.net/projects/javacsv/ 시도해보십시오. – Bozho

+1

대부분의 CSV 파서는 16 비트 문자를 처리해야합니다. 32 비트 문자 지원이 필요하다는 말입니까? –

+0

다른 프로젝트의 인하 우스를 포함하여 몇 가지 파서를 사용해 보았습니다. 그래서 그들은 모두 내부적으로 필드를 반복하여 1) read line 2) charAt()를 사용하여 행을 이동하고 일부 임시 char에 추가하여 시도합니다. 중국어 텍스트가 포함 된 UTF-8 파일이 있으며 일부 심볼은 3 바이트로 인코딩되어 작동하지 않습니다. BOM이 많은 파서에서 올바르게 처리되지 않는 것으로 보입니다. –

답변

-1

매우 쉽게 작성 할 수 있습니다. FileInputStream 및 UTF-8을 사용하는 InputStreamReader로 파일을 엽니 다. BufferedReader에 랩핑하면 readLine()을 사용하여 반복 할 수 있습니다. 각 행을 String으로 가져옵니다. 정규 표현식을 사용하여 필드로 분할하십시오.

유일한 까다로운 부분은 인용 부호 안에 필드 구분 기호로 묶인 쉼표를 처리하지 않기 때문에 정규식을 구성하는 것입니다.

위의 접근 방식은 다소 비효율적이지만 대부분의 앱에는 충분히 빠릅니다. 실제 성능 요구 사항이 있다면 캐릭터를 반복하는 무언가가 필요합니다. 나는 몇 년 전에 ok 시스템 상태 머신을 사용했다.

+0

밤에는 나쁘지 않은 꿈을 꾸지 않으면 서 감당할 수있는 것보다 훨씬 간단합니다 .--) 이제는 바로 사용할 수있는 라이브러리를 찾고 있습니다. –

+0

이것은 실제로 * 간단하지 않습니다. 간단한 경우는 regexes로 처리 할 수 ​​있지만 쉼표 나 (선택 사항 인) 따옴표 구분 기호가 포함 된 필드에 들어갈 때는 Regex가 작동하지 않습니다. 정규 표현식은 특정 작업을위한 훌륭한 도구이지만 잘 작성된 파서를 대신 할 수는 없습니다. –

+0

나는 그것이 일할 것이라고 생각한다. 단지 조금 더 복잡 할 것이다. Google은 즉시 사용할 수있는 좋은 정규 표현식을 제공합니다. 예를 들어 여기를 참조하십시오. http://www.programmersheaven.com/user/Jonathan/blog/73-Splitting-CSV-with-regex/ –

4

저는 바퀴의 재발 명을 믿지 않습니다. 그래서 저는 제 자신의 파서를 쓰고 다른 누군가와 같은 두통을 겪고 싶지 않습니다.

필자는 개인적으로 CSV 파서가 Ostermiller 인 것을 좋아합니다. 또한 관심이 있다면 Maven Repository를 가지고 있습니다.


OpenCSV을 확인할 수도 있습니다. 이미 유니 코드를 구문 분석하는 데 대해 스택 오버플로 question이 있습니다.

+0

이 모양이 좋으며 심지어 직접 언급되었습니다. 중국어를 지원하기 위해 GPL을 사용한다고 생각합니다. 그것은 제가 일하는 데 사용할 수없는 것입니다. –