엑셀에서 CSV 텍스트 파일 UTF-8 한글 보이도록 저장하는 방법 > PHP
PHP

엑셀에서 CSV 텍스트 파일 UTF-8 한글 보이도록 저장하는 방법

조회 206회 댓글 0건
  • 페이지 주소 복사
  • 페이스북으로 공유
  • X 로  공유
  • 트위터로  공유
  • 네이버 블로그로 공유
  • 네이버 카페 공유하기
  • 네이버 라인 공유하기
  • 네이버 밴드 공유하기
  • 링크드인으로 공유하기
  • 핀터레스트에 공유하기

결론 부터 말하면 utf-8이 아니라 utf-8 bom을 사용하면 됩니다.

방법은 아래와 같이 무척 간단하게 맢에 붙여 주기만 하면 엑셀에서 csv파일 열였을때 cp949가 아니라 utf-8일때도 한글 잘 보입니다.

utf-8과 utf-8 bom은 호환되기 때문에 파일의 헤더부분에 utf-8 bom 이라고 표시만 해주면 되는 방식 입니다.



 



    // UTF-8 BOM 추가 (엑셀에서 한글 인식용)
    $utf8_bom            = "\xEF\xBB\xBF";
    $wrtSize             = file_put_contents($wrtFile, $utf8_bom . $csvDataH);
 


utf-8만 지원하는 에디터에서도 잘 보이고 엑셀 프로그램에서 csv파일 읽었을때 잘 보이는 방식 입니다.



    /**
     * UTF-8 BOM을 추가하여 CSV 파일을 생성하는 함수 (엑셀 한글 인식용)
     *
     * @param string $filePath 저장할 파일 경로
     * @param string $csvData CSV 데이터 내용
     * @return int|false 쓰여진 바이트 수 또는 실패시 false
     */
    function writeCSVWithBOM( string $filePath, string $csvData) : int|false
    {
        $utf8_bom = "\xEF\xBB\xBF";
        return file_put_contents($filePath, $utf8_bom . $csvData);
    }
   

    /**
     * 배열 데이터를 UTF-8 BOM이 포함된 CSV 파일로 저장하는 함수
     *
     * @param string $filePath 저장할 파일 경로
     * @param array $a CSV로 변환할 2차원 배열
     * @param string $delimiter 구분자 (기본값: 쉼표)
     * @param string $enclosure 감싸는 문자 (기본값: 큰따옴표)
     * @return int|false 쓰여진 바이트 수 또는 실패시 false
     */
    function arrayToCSVWithBOM( string $filePath, array $a, string $delimiter = ',', string $enclosure = '"') : int|false
    {
        $utf8_bom   = "\xEF\xBB\xBF";
        $output     = fopen('php://temp', 'r+');

        foreach ($a as $row) {
            fputcsv($output, $row, $delimiter, $enclosure);
        }

        rewind($output);
        $csvData = stream_get_contents($output);
        fclose($output);

        return file_put_contents($filePath, $utf8_bom . $csvData);
    }

    // 사용 예시
    // 1. 문자열 데이터로 CSV 파일 생성
    $csvContent = "이름,나이,직업\n홍길동,30,개발자\n김영희,25,디자이너\n";
    $result     = writeCSVWithBOM('output.csv', $csvContent);


    // 2. 배열 데이터로 CSV 파일 생성
    $a = [
        ['이름', '나이', '직업'],
        ['김영희', 25, '디자인'],
        ['박철수', 35, '기획자']
    ];
    $result = arrayToCSVWithBOM('array_output.csv', $a);

 




* 같이보면 좋은글

  - 캐릭터셋 구분함수 utf8 bom euckr cp949 > PHP

  - 윈도우 CMD와 엑셀에서 CSV 텍스트파일 읽을때의 캐릭터셋 


  • 페이지 주소 복사
  • 페이스북으로 공유
  • X 로  공유
  • 트위터로  공유
  • 네이버 블로그로 공유
  • 네이버 카페 공유하기
  • 네이버 라인 공유하기
  • 네이버 밴드 공유하기
  • 링크드인으로 공유하기
  • 핀터레스트에 공유하기
전체 229건 1 페이지
  • profile_image 프레임 워크에서도 사용하는 방식중에서 간편하게 사용하는 방식의 소개 입니다.기본 구조는 전통적인 방식으로 가독성과 빠른 처리가 장점 이면서 include를 쉽게 처리 하는 방식으로 다음과 같습니다. 우선 기본구조는 아래 형태를 가지게 되고project/│ config.php├─ include/│   ├ inc_header.php│   ├ inc_footer.php│   └ functions.php├─ app/│   ├ post_detail.php│   ├ post_list.php│   └ category_…
  • profile_image 결론부터 말하면 별 문제 없습니다. 오래된것이라는것에 대해 단어에서 '오래된' '옛말부터사용한' 이런 단어를 희안하게 부정하는 뇌를 가지는 경우가 있는데 아직까지 사용되고 있다는것은 쓸모가 있다는것이기도 합니다. 문제 없다고 보지만 혹시 잘못 생각했거나 최근들어 바뀌었을 수 있기 때문에 LLM에 아래와 같이 물어 보았습니다.php로 웹사이트를 만들려 하는데 구조를 난 예전 방식으로 - 왜냐하면 가장 속도가 빠르고 가독성이 좋아include 보안 및 config 및 공통파일include inc_heaer.php비즈니스 로직include inc_footer.php이런 방식으로 하려 하는데 혹시나 내가 잘못 생각하는…
  • profile_image 여기서의 예는 데이터베이스 접근을위한 정보를 생성자에 넣어주는데 이것이 디버깅할때 보이는 문제를 해결 하기 위한 것입니다.결론부터 말하면 디버그용 매직메소드를 사용하면 됩니다. print_r() 같은 것으로 디버깅하기 위해서 화면 출력을 하면 private의 변수 값이 출력 되는데 이를 방지 하기 위한 예를 들면 다음과 같습니다.    class MysqliDatabase    {        private $masterInfo = ['password' => 'secret123'];        pr…
  • profile_image 단축URL을 만드는 목적엔 여러가지가 있지만 QR코드를 사용하기 위해서도 많이 사용됩니다.유튜브의 주소도 끝을 보면 단축URL처럼 코드로 되어 있지요 만드는 기본만 알면 되는데 원리는 간단하고 다음과 같습니다.이것만 알면 나머지는 뚝닥뚝닥 만들면 되기 때문입니다.1) 우리는 DB에 넣을때 고유한 번호의 숫자를 레코드 관리를 위해 넣어줍니다. 보통 id란 컬럼을 사용2) 이 숫자는 10진수 인데 이걸 62진수 같은것으로 만듭니다. 이게 우리가 보는 단축URL 코드3) 단축URL 사이트는 짧을 수록 좋기 때문에 짧은 도메인 생성4) QR코드 라이브러리 활용해서 QR코드 만들면 됩니다.    /**…
  • profile_image 스케줄러에 등록된 프로그램에서 특정 함수 사용하는것이 있을 경우 어느 프로그램에서 사용하는지 알고 싶어서 만들게 된 프로그램 입니다.사용은 이렇게 했지만 반드시 그럴 필요는 없지요.특정 약간 수정해서 특정 디렉토리에 있는것을 찾을 수도 있고. 웬만한것은 쉘스크립트로도 가능할듯.         // cron_php_word_search_functions.php    // 설명: crontab/스케줄러 파일들을 읽어서 php 파일 경로를 찾아    //       해당 php 파일 내용에 미리 지정한 단어들이 있는지 …
  • profile_image 장시간 실행 시키는 프로그램이 있는데 죽네요.그냥 죽기나 하면 자원 소모가 없을것인데 .... 애가 멈춘현상이 있어 프로세스를 강제로 종료해야 되는 상황인데 API 호출 하면서 거기서 문제가 있는듯 합니다. 내부 구조는 난 모르겠고 다시 받으면 되기 때문에 무한 루프 돌면서 파일 갱신 시간이 1분 넘었으면 무조건 kill 처리하고 다시 실행 시키는 프로그램 입니다.이때 사용하는 것인데 대략 다음과 같습니다.이건 당연히 웹서버가 아니라 리눅스 쉘에서 높은 권한으로 실행시키는 프로그램 입니다. 혹시 PHP라고 하니 웹브라우저를 통해 웹서버에서 실행한다고 생각 하시는 분은 없겠죠?시스템에 따라 다를…
  • profile_image MRTG나 각종 관제용 프로그램을 사용하는곳에선 필요하지 않지만 소규모로 운영하는 곳은 이런것이 필요 합니다.그리고 은근히 디스크용량 때문에 발생하는 문제 들이 있습니다. 나도 모르게 로그가 많이 쌓여서 disk full 만들어 다른 문제를 야기 시키죠충분한 디스크 용량이 있으면 괜찮은데 그렇지 아니한 경우는 반드시 이러한 프로그램이 필요 합니다.이렇게 하여 SMS나 텔레그램 같은 곳으로 전달을 받아 운영 관리를 하면 되겠지요.     class DiskUsageChecker {        /** @var int 사용률 임계값 (%) */ …

상업적 이용 금지. 컨텐츠는 개인 용도로만 사용이 가능 합니다.