2014-07-06 2 views
0

MySQL 데이터베이스와 Perl 스크립트를 UTF-8로 변환했습니다. 그리고 마침내 그것이 효과가 있었지만, 그것은 어떻게 든 미친 해결책입니다. 그게 내가 무슨 짓을했는지 :Perl-Scripts 및 MySql Database를 UTF8로 설정 : 독일어 Umlaute는 키릴 문자로만 작동합니다.

MySQL 데이터베이스가 : 완전히 UTF8

펄 스크립트 설정 : 소스 코드가 UTF8 인코딩으로 변환됩니다. "utf8 사용;" 상단에.

HTML 헤더 :

 print "Content-type: text/html\n\n";

 &ltMETA CHARSET='UTF-8'>

가 데이터베이스에 연결 :

 $dbh->{'mysql_enable_utf8'} = 1;

 "set names 'utf8';"

자, 모든 것은 키릴 문자 (러시아어) 문자와 함께 작동합니다. 입력, 출력 및 데이터베이스에서의 처리입니다. 하지만 내가 가진 문제는 독일어 "Umlaute"입니다 : äöü. 브라우저에서 올바르게 표시되지 않습니다. 문자를 표시하지 않는 HTML 요소 옆에있는 문자에 키릴 문자를 넣은 경우에만 작동합니다 (예 : 이런 식으로 :

 <!-- Э -->

이것은 어색한 해결책이며, 나는 해결책이 있어야한다는 것을 알고 있습니다. 아무도 무엇이 빠져 있는지 알 수 없습니다. 모든 답변에 미리 감사드립니다.

업데이트 :

응답 해 주셔서 감사합니다. 가장 간단한 HTML 파일로도 문제가 있다는 것을 알아 냈습니다.

#!/usr/bin/perl 
use utf8; 
print "Content-Type: text/html; charset=utf-8\n\n"; 
print <<END; 
    <HTML> 
     <HEAD> 
      <META CHARSET='UTF-8'> 
     </HEAD> 
     <BODY> 
      <H1>The Country Österreich</H1> 
     </BODY> 
    </HTML> 
END 

결과는에서 볼 수있다 : 당신이 볼 수 있듯이 http://5mls.com/test_bad.cgi
은 "Ö"가 표시되지 않습니다 나는이 소스 코드를 사용합니다.
이제 작동 코드 :

#!/usr/bin/perl 
use utf8; 
print "Content-Type: text/html; charset=utf-8\n\n"; 
print <<END; 
    <HTML> 
     <HEAD> 
      <META CHARSET='UTF-8'> 
     </HEAD> 
     <BODY> 
      <H1>The Country Österreich<!-- Э --></H1> 
     </BODY> 
    </HTML> 
END 

결과는에서 볼 수있다 :은 "O" http://5mls.com/test_good.cgi
이 시간 때문에 주석의 러시아 문자 "Э"의 제대로 표시됩니다. "Ö"가 러시아 문자없이 어떻게 표시 될 수 있는지, 아무도 모르는가?

+1

헤더에 utf-8도 보내십시오 :'print "Content-type : text/html charset = utf-8 \ n \ n"; "http 헤더가 먼저 고려됩니다. – VMai

+1

문제가있는 곳을 찾아야합니다. 1) phpMyAdmin을 가지고 있습니까? 그렇다면 phpMyAdmin을 사용할 때 데이터베이스에 올바른 문자열이 표시됩니까? 그 프로그램이 실제로 데이터베이스에있는 것을 안정적으로 표시한다는 것을 알고 있습니다. – ikegami

+1

2) 데이터베이스의 데이터를 올바르게 처리합니까? 'sprintf ("U + % v04X", $ str)'의 출력과 그 문자열이 무엇을 기대 하는지를 제공하십시오. – ikegami

답변

0

또한 perl 스크립트 및 MySQL에서 작동하는 utf8을 사용하는 데 문제가있었습니다.

브라우저에서 웹 개발자 도구를 사용하여 cgi 스크립트가 브라우저에 보내는 것을 확인하십시오. 그런 다음 인코딩 모듈을 사용하여 펄 귀하의 브라우저에 보내는 인코딩 시도 :

use Encode qw(encode); 

을하고 출력을 인코딩 : 게다가, 당신의 test_bad.cgi 스크립트가 나를 위해 작동 및

my $austria = "<HTML> 
    <HEAD> 
     <META CHARSET='UTF-8'> 
    </HEAD> 
    <BODY> 
     <H1>The Country Österreich</H1> 
    </BODY> 
</HTML>"; 
print encode('utf-8', $austria); 

밖으로두고 내 브라우저에서 올바른 출력.