웹 양식 (Perl 스크립트 사용)을 통해 수집 된 8859 형식으로 저장되어있는 텍스트 문서의 적당한 크기의 플랫 파일 데이터베이스가 있습니다. 최근까지 내가 정규식의 간단한 세트 일반 1,252 문자 (둥근 따옴표, 작은 따옴표 등)을 협상했다 최대 : 내가 결정 이후Perl에서 utf8 모드로 열어 본 ASCII 텍스트 파일 중 1252자를 필터링합니다.
$line=~s/\x91/\&\#8216\;/g; # smart apostrophe left
$line=~s/\x92/\&\#8217\;/g; # smart apostrophe right
... 등등 그러나
내가가는되어야한다 유니 코드를 사용하고 모든 스크립트를 변환하여 utf8 (모든 새 머티리얼에 대한 처리를 수행함)을 출력하면이 (기존) 1252 문자에 대한 정규 표현식이 더 이상 작동하지 않고 Perl html 출력이 문자 ' x92 '와'\ x93 '등 (적어도 utf8 모드에서 브라우저에 나타나는 방법 (http가 아닌 ftp)을 다운로드하고 텍스트 편집기 (textpad)에서 열기, 정의되지 않은 단일 문자가 남아서 Firefox의 기본 출력 파일 (콘텐츠 형식 헤더 없음) 8859 모드는 올바른 문자를 렌더링합니다.
스크립트의 시작에 새로운 UTF8 프라그 마를
은 다음과 같습니다사용 CGI의 QW (-utf8); 오픈 IO 사용 => ': utf8';
이것은 utf8 모드로 인해 문자가 1 바이트가 아닌 2 바이트로되어 있고 0x80에서 0xff 범위의 문자에 적용된다는 것을 이해합니다. 이에 대해서는 wikibooks 관련 기사를 읽었지 만 나는 현명하지 않았습니다. 그들을 필터링하는 방법에 관해서. 이상적으로 나는 평범한 파일 데이터베이스가 이제 8859와 utf8의 혼합을 포함하고 있기 때문에 모든 문서를 utf8 모드로 다시 저장해야한다는 것을 알고 있습니다. 그러나 어쨌든이 작업을 수행하려면 먼저 필터를 사용해야합니다. .
그리고 내부적으로 2 바이트 스토리지에 관해서는 잘못된 것일 수 있습니다. Perl이 다양한 상황에 따라 매우 다르게 처리한다는 것을 암시하는 것처럼 보였기 때문입니다.
누구든지 정규식 솔루션을 제공 할 수 있다면 매우 감사 할 것입니다. 아니면 다른 방법. 나는 여러 가지 시도와 해킹 실패로 몇 주 동안 머리카락을 찢어 버렸다. 일반적으로 대체해야 할 약 6,1252 자 정도의 문자가 있습니다. 필터 방법을 사용하면 utf8에서 전체 재봉틀을 다시 저장하고 1252가 잊어 버릴 수 있습니다.
아 ... 그리고는 DB 지금 UTF8과 8859 으악를 포함하고 있기 때문에 8859 및 필터에서 파일을 열 단지 재설정 할 수 없습니다. – Beeblbrox