2009-09-25 3 views
1

(이론상의) 기본 파일/스트림 인코딩 감지 기능이있는 유니 코드 SynEdit을 사용하고 있습니다. 그것은 내 PHP 스크립트에 의해 생성 된 파일을 열 때까지 잘 작동했습니다. 내가 말하고있는 파일은 BOM이없는 utf8으로 UniSynEdit에 의해 감지됩니다. 불행히도 열리지 않습니다.로드 된 문자열은 비어 있습니다. 나는 그것을 디버깅하고, 문제는 Utf8Decode 함수 인 것 같습니다. 어떤 이유로 실패하고 빈 문자열을 반환합니다. 또한 16 진수 편집기를 사용하여 파일을 검사했는데 BOM이없고 일반 문자는 모두 1 바이트로 인코딩되며 파일에있는 폴란드 문자는 2 바이트입니다. ..델파이, 문자셋 감지 ([Uni] SynEdit) - Utf8Decode 문제

무엇이 잘못 될 수 있으며이를 방지하려면 어떻게해야합니까? 내가 잘못 인코딩 된 파일이 전혀 파일보다 낫다고 생각합니다 ...

+0

어떤 델파이 버전을 사용하고 있습니까? –

+0

쓰는 것을 잊어 버렸습니다 ... Delphi 7. – migajek

+0

BOM이있을 때 어떻게됩니까? –

답변

3

정말로 제대로 UTF-8로 인코딩되지 않은 파일을로드하려면, 다음을 위해 빈 결과를 반환하지 않는 함수를 사용해야합니다. 무효 인 바이트 순서를 포함한 캐릭터 라인. 대신에 치환 캐릭터를 치환한다. Wikipedia entry on UTF-8, 특히 "잘못된 바이트 시퀀스"섹션을 참조하십시오.

불행히도 Delphi 2009 (내부에서 확인하기 위해 Delphi 7을 사용하지 마십시오) 은 내부적으로 MultibyteToWideChar(CP_UTF8, ...)을 호출합니다. 이는 잘못된 바이트 시퀀스에서 오류를 반환합니다.

대체 인코딩 기능을 사용하면됩니다. 어쩌면 제 3 자 델파이 라이브러리 중 하나에 자체 디코딩 기능이있는 무언가가있을 수 있습니다. 연결된 라이브러리 here 중 하나를 사용할 수 있습니다. 다른 모든 것이 실패하면 유니 코드 컨소시엄의 this code을 기반으로 직접 작성할 수 있습니다.

+0

BTW : PHP 스크립트로 UTF-8 파일을 만들지도 않았 으면 * 다시 생각해보십시오. 그것은, 그리고 바람직하게 유효한 UTF-8 :-) – mghie

+0

그 지점이 아니야 :) 사실 덕분에 내가 어떤 점에서 내 애플 리케이션을 찾지 못했습니다, 지금까지 모든 ** 유효한 ** 파일을 처리 확신했다. 그것은 그렇다. 하지만 그 사람을 다시 테스트 할 기회가 없었어요;) – migajek

+0

고마워, 그 UTF8StringToWideString cUnicodeCodecs (델파이 기본)에서 잘 작동하는 것 :] – migajek