2011-09-14 4 views
8

Perl을 사용하여 CSV 파일을 작성하고 있습니다. CSV로 들어가는 데이터에는 유니 코드 문자가 포함됩니다. 나는 CSV를 작성하려면 다음을 사용하고 있습니다 : 파일 내에서 정확하게 문자를 쓰고 있지만 표시되지 않습니다Perl 파일 출력에서 ​​UTF-8 바이트 순서 표 표시하기

#OPEN THE FILE FOR WRITE 
open(my $fh, ">:utf8", "rpt-".$datestring.".csv") 
or die "cannot open < rpt.csv: $!"; 

가 UTF8 바이트 순서 표시를 포함 할 수 있습니다. 이렇게하면 내 사용자가 Excel에서 파일을 열려고합니다. Byte Order Mark를 강제 작성하는 방법이 있습니까?

print $fh "\x{EFBBBF}; 

내가 파일의 상단에 횡설수설로 끝났다 :

나는 그것을 다음과 같은 방법을 시도했다. 어떤 도움이라도 대단히 감사하겠습니다. 이 일을

+2

UTF-8에 대한 'Byte Order Mark'는 논리적으로 의미가 없으므로 UTF8에 대해 한 가지 가능한 바이트 순서 만 있습니다. 나는 다양한 Windows 응용 프로그램이 'BOM'의 존재에 의존하여 Microsoft 코드 페이지가 아닌 유니 코드 인코딩을 사용한다는 것을 알고 있지만 깨진 MS 응용 프로그램을 다루지 않으면 BOM을 추가하지 않아도됩니다. UTF8 문서 –

+0

@Grant : 또는, 유창하다. UTF-8은 바이트 스트림으로 인코딩하기 때문에 * no * 바이트 순서가있다. 바이트 순서 (또는 엔디 언)는 멀티 바이트 숫자에만 의미가 있습니다. – musiKk

+1

@ 그랜 원칙에 동의합니다. 그러나 내 사용자는 깨진 MS 애플 리케이션을 사용하고 있습니다. 따라서 BOM을 강제 할 필요가 있습니다. –

답변

13

시도 : 파일을 연 후

print $fh chr(65279); 

.

+0

이것은 그랬다! 감사! –

+8

'print $ fh chr (0xFEFF); '가 더 명확합니다. –

+8

'File :: BOM();을 사용하십시오. 내 $ fh를 열어 라. '> : utf8 : via (File :: BOM)', ... '은 더 많은 정보를 제공 할 것입니다. – daxim

관련 문제