2013-05-03 3 views
3

위해 내가 JSON은 PHPexcel인코딩 제대로 CSV 파일은 PHPexcel

목표는로 JSON에서 내보내는 것입니다

의 도움으로 .XLS하는 CSV 변환, 그것을 디코딩 PHP로 CSV 파일에 쓰기가 엑셀 파일이 올바르게 출력됩니다. UTF-8 CSV 파일을 지원하지 않는 Mac 2011 용 Excel에서 주로 인코딩에 문제가 있습니다. link 내 Mac에서 미리 (스페이스 바)를 누르면 인코딩 된 것처럼 보입니다. 문제는 탁월합니다. CSV에 대한

우선 코드 :

$file_csv = fopen('files/file.csv', 'w'); 

다음 JSON : 지금은 내가 UTF-8에 문제가 엑셀로이 CSV를 가져 오는 경우

$response_data = json_decode($connection->response['response'], true); 
foreach ($response_data as $value) 
    { 
    //take the data I have 10 strings here in reality 
    $text_lang = $value['lang']; 
    $date = $value['date']; 
    //insert into the csv 
    $details = array($text_lang, $date); 
    fputcsv($file_csv, $details); 
}; 
fclose($file_csv); 

. 예를 들어 텍스트 편집기로 변환하면 Textmate를 UTF-16LE로 변환 한 다음 Excel로 가져 오기하면 모든 것이 부드럽게 처리됩니다.

$objReader = PHPExcel_IOFactory::createReader('CSV'); 
$objPHPExcel = $objReader->load('files/file.csv'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('files/summary.xls'); 

가 summary.xls이 UTF-8에 깨진 및 열 때 수리가 필요합니다 :

그리고 PHPExcel 코드는 .XLS from here을 만들 수 있습니다.


내 첫 번째 시도는 그 엑셀로 확인 될 것입니다 있는지 확인하기 위해 PHP에서 UTF-16LE로 위의 file.csv를 변환하는 것이 었습니다. 나는 fputcsv 전에 iconv을 사용하고 엑셀은

이 지금은 UTF-16LE로 csv 파일을 인코딩하고 PHPExcel로 잘로드 할 ... 중국어 단어를 보여 주었다. 다음 줄을 사용했지만 작동하지 않았습니다. 아마도 incov으로 만든 .csv 파일은 부분적으로 (?) UTF-8 및 UTF-16LE 이었기 때문일 수 있습니다.

$objReader->setInputEncoding('UTF-16LE'); 
$objPHPExcel = $objReader->load('file.csv'); 

목표 엑셀 문제없이 부호화 .XLS (또는 .xlxs) 문서로 JSON에서 데이터를 렌더링하는 것이다.

+1

인코딩을 믹싱하면 문제가 발생할 수 있습니다. CSV 판독기는 항상 값을 PHPExcel 셀 객체로 삽입하기 전에 입력 인코딩을 UTF-8로 변환하려고 시도합니다 ... CSV 값이 UTF- 16LE,이 올바르게 작동하지만 UTF-8 값을 UTF-8로 변환하면 UTF16-LE 것처럼 문제가 발생할 .... csv 파일을 내부적으로 일관성이 있어야합니다. –

+0

@MarkBaker 주셔서 감사합니다 의견 및 PHPExcel에 대한 귀하의 헌신에 감사드립니다. 확실하지는 않지만 다음과 같은 특수 문자와 관련된 몇 가지 문제가 있다고 생각합니다. ♑ (사파리/크롬에서 읽을 수 없음) Excel에서 이러한 문자가 발견되면 데이터가 손실되는 동안 데이터가 손상되어 복구해야합니다. 이론적으로 "Apple Color Emoji"는 유니 코드 또는 UTF-8 읽기 쉽기 때문에 문제가되지 않아야합니다. 더 많은 것을 지금 찾고 있습니다 – Diolor

+0

@ MarkBaker 예. 나는 이모 지에서 문자열을 위생해야했다. 이 함수를 추가했습니다. http://stackoverflow.com/a/12824140/1447885 – Diolor

답변

2
$objReader->setInputEncoding(''); 

$objPHPExcel = $objReader->load('file.csv'); 

이것은 제대로 작동했습니다.