2011-11-08 1 views
0

자바 스크립트 파일 집합을 반복하여 인코딩을 감지하고 latin1 및 utf8 형식으로 저장하려고합니다. 지금까지 PHP를 사용하여 UTF-8 파일을 Latin1로 변환하려고했습니다. 데이터를 검색 한 후에 여러 가지 인코딩 방법을 시도했지만 아무 것도 작동하지 않는 것 같습니다.PHP를 사용하는 Linux에서 데이터를 라틴어 1로 변환 할 수 없습니다.

//Read file 
$fileIn = fopen($dirName . $fileNameIn, 'r'); 
$dataIn = fread($fileIn, filesize($dirName . $fileNameIn)); 
fclose($fileIn); 

$encoding = mb_detect_encoding($dataIn); 
echo "Encoding in: " . $encoding . "\r\n"; 

$dataOut = utf8_decode($dataIn); 

echo "Encoding after: " . mb_detect_encoding($dataOut) . "\r\n"; 

이 출력물 인쇄 감지 된 인코딩으로 UTF-8을 모두 : 여기

내가 뭐하는 거지입니다. 어떤 아이디어?

내 우분투 상자의 시스템 기본값이 UTF-8이라는 사실과 관련이 있습니까?

답변

1

당신은의 iconv 기능 (http://www.php.net/manual/en/book.iconv.php)에 대해 살펴 걸릴 수도 있습니다 : 따라서

string iconv (string $in_charset , string $out_charset , string $str) 

를 작성 시도
$dataOut = iconv($encoding, "ISO-8859-1", $dataIn); 

이 문제를 해결하는지 확인하십시오. 또한, mb_detect_encoding에 엄격 모드를 사용해보십시오 : 그것은 인코딩을 감지하는 것은 기술적으로 불가능으로

mb_detect_encoding($dataOut, mb_detect_order(), true); 
+0

이 변환은 감지가 이제 인코딩이 변경되었다고보고한다는 의미에서 작동하는 것 같습니다. 그러나 디스크에 기록 할 때 PHP는 여전히 UTF-8 파일을 만듭니다. – Kristofer

+0

일부 데이터를 변환하지 못했을 수 있습니다 (감지가 안정적이지는 않지만). – Kristofer

1

mb_detect_encoding는 잘못된 될 수 있습니다. 인코딩을 모르는 경우에는 추측 할 수만 있습니다 (Summaries of supported encodings 참조).

기술적으로 말해서 문자열은 여러 개의 인코딩을 가질 수 있지만 mb_detect_encoding은 하나의 값만 반환합니다. 그리고 서면으로 인코딩을 감지하는 것은 기술적으로 불가능합니다.

echo "Encoding after: " . mb_detect_encoding($dataOut, 'ISO-8859-1', TRUE) . "\r\n"; 

어쩌면 이것은 단지 ISO-8859-1에 대한 검사를하는 데 도움이 엄격하지 : 당신이 특정 인코딩을 확인으로

, 당신은 추가 매개 변수를 사용할 수있다.

관련 문제