미채택 완료

파일 인코딩 변경 문의

2022-06-16 (목) 17:09:21 2,035

안녕하세요? 고수 여러분! 다름이 아니오라 질문하나 하고자 글 끄적여 봅니다.
아래 소스는 영상 자막 입니다.
이 자막 파일 인코딩이 utf-8으로 되어있어야 정상적으로 표현 됩니다.
참고소스는 아래 소스의 인코딩은 UCS-2 LE 인데 utf-8으로 변환해야 정상적으로 자막이 표시 됩니다.

Copy
<SAMI>

<HEAD>
<TITLE>Foo</TITLE>

<STYLE TYPE="text/css">
<!--
P { margin-left:8pt; margin-right:8pt; margin-bottom:2pt;
    margin-top:2pt; font-size:14pt; text-align:center;
    font-family:굴림, Arial; font-weight:normal; color:white;
    background-color:black; }
.KRCC { Name:한국어; lang:ko-KR; SAMIType:CC; }
#STDPrn { Name:Standard Print; }
#LargePrn { Name:Large Print; font-size:20pt; }
#SmallPrn { Name:Small Print; font-size:10pt; }
-->
</STYLE>

</HEAD>

<BODY>

<SYNC Start=1526><P Class=KRCC><font color = 00F7E2>색 잉크가 완성되어<br>기뻐하는 마인
<SYNC Start=1415076><P Class=KRCC>Test
</BODY>
</SAMI>
Copy
<?php

  ini_set('display_errors', '0');

    header('Content-Type: text/html; charset=UTF-8');

 

    $filepath = "M:/IDC/".urldecode($_GET['path']);

   

  if(!file_exists($filepath)) exit();

 

  $fps = fopen($filepath , "r");

  $line = fgets($fps, filesize($filepath));

  fclose($fps);

   

    $encoding = iconv('EUC-KR','UTF-8',$line)==$line ? 'UTF-8' : 'EUC-KR';    //인코딩 정보 확인

           

  if($encoding == "EUC-KR")

  {

    shell_exec('C:/apache/web/EncodingChanger.exe '.urlencode($filepath));

  }

  //print urldecode($filepath);

   

  $fp = fopen($filepath , "r");

 

    $index = -1;    //행의 개수

    $col_time = 0;    //시간을 담는 행

    $col_text = 1;    //문자를 담는 행

    $text = "";

   

    while(($line = fgets($fp, 4096)) !== false){

     

    //대소문자를 가리지않고 <sync를 찾음

        if(stristr($line , "<sync")){

            $index++;

            $text = "";

            $start = strpos($line , "=")+1;

            $end = strpos($line , ">");

            $time = substr($line , $start , $end-$start);

            if(strchr($time , " ")){

                $time = substr($time ,0, strpos($time , " "));

            }

            $smi[$index][$col_time] = $time;

            $text = strstr($line , ">");

            $smi[$index][$col_text] = substr($text , 1 , strlen($text));

        }else{

            $smi[$index][$col_text] .= $line;

        }

    }

    for($i=0; $i<$index; $i++){

        print "$!".$smi[$i][$col_time]."$/";

     

    $Lines = $smi[$i][$col_text];

     

    $str_encode = mb_detect_encoding($Lines,'UTF-8,EUC-KR,ASCII');

    if(strtoupper($str_encode) != 'UTF-8')

    {

      print mb_convert_encoding($Lines, "UTF-8", $str_encode)."\n";

       

      //print iconv($str_encode , 'UTF-8' , $Lines)."\n";

    }

    else

    {

      print $Lines."\n";

    }

  }

  fclose($fp);

?>
|

답변 3개 / 댓글 3개

소스의 인코딩은 UCS-2 LE 인데 <-- 그런데 EUC-KR 이니 ASCII 같은게 왜 나오나요?

mb_convert_encoding($Lines, 'UTF-8', 'UCS-2LE');

그래서 질문이 요건이 무엇인지요?

답변에 대한 댓글 2개

2022-06-16 (목) 19:41:38
파일 인코딩을 utf-8로 변경하는 부분입니다.
먼저 문제셋 관련되어 안내를 드려보면 UTF-8은 가변길이의 문자 변환방식이고. 위에서 언급하신 UCS-2 는 국제 문자 세트(UCS, Universal Character Set, 범용 문자 집합) 로서 2.0 버전이란 뜻입니다.

지금 먼저소스를 보시면 한글형식의 EUC-KR로만 encodeing 하고자하시는 거 같습니다. 따라서 당UCS-2에 호환되는 코드를 찾아보니 ISO-8859-1 정도등이 될수 있습니다. (ISO-8859-1호환코드라 차이가 날수 있습니다.)

UCS-2로 되어있다면 문자셋의 정보를 먼저 공부를 해보신후에 해당코드를 변경해보시길 바라겠습니다.
2022-06-16 (목) 17:25:38

질문을 모르겠네요 ㄷㄷ

답변에 대한 댓글 1개

2022-06-16 (목) 19:41:27
파일 인코딩을 utf-8로 변경하는 부분입니다.

답변을 작성하려면 로그인이 필요합니다.