문제

Delphi 7에서 Delphi 2009로 ISAPI (PageProducers) 응용 프로그램을 포팅하고 있습니다. 페이지는 UTF8의 HTML 파일을 기반으로합니다.

Onhtmltag가 발사 될 때를 제외하고는 모든 것이 잘 진행되고 투명 태그를 악센트 캐릭터 (Áé ...)와 같은 특수 문자로 바꾸는 태그를 대체합니다. 해당 캐릭터는 출력으로 문자로 대체됩니다.

뭐가 문제 야?

도움이 되었습니까?

해결책

디버깅 절차의 일환으로 브라우저가 질문 표시 문자에 대해 어떤 바이트 값을받는 지 정확히 찾아야합니다.

아시다시피, Delphi 2009의 문자열 유형은 유니 코드이고 모든 이전 버전은 ANSI였습니다. 델파이 7은 다음을 소개했다 Utf8String 유형이지만 Delphi 2009는이 유형을 특별하게 만들었습니다. UTF-8으로 인코딩 된 문자열을 고정하는 데 해당 유형을 사용하지 않는 경우 시작해야합니다. 보유 된 값 Utf8String 변수는 변환됩니다 UnicodeString 하나를 다른 사람에게 할당하면 자동으로 값.

UTF-8 인코딩 된 문자열을 평범하게 저장하는 경우 AnsiString 변수는 기본 시스템 코드 페이지를 사용하여 유니 코드로 변환됩니다. UnicodeString. 그것은 당신이 원하는 것이 아닙니다.

UTF-8 인코딩 된 리터럴을 유형 변수에 할당하는 경우 string, 그만. 이 유형은 값이 UTF-16으로 인코딩 될 것으로 예상합니다. WideString 항상 가지고 있습니다.

파일을 a에로드하는 경우 TStrings 후손 LoadFromFile, 그런 다음 해당 메소드의 두 번째 매개 변수를 사용해야하므로 사용하려는 인코딩을 알려줍니다. UTF-8에 인코딩 된 파일이 사용해야합니다 TEncoding.UTF8. 기본값은입니다 TEncoding.Unicode, Little-Endian UTF-16입니다.

다른 팁

이것은 아마도 캐릭터 인코딩 문제 일 것입니다.

Delphi IDE는 일반적으로 Windows-1252 또는 UTF-16을 사용하여 소스 코드를 인코딩합니다. HTML은 종종 UTF-8을 사용합니다.

아마도 인코딩 사이에 약간의 음역이 필요할 것입니다. 이를 위해서는 정확히 어떤 인코딩이 사용되는지 알아 내야합니다 ( 언급).

또는 HTML로 되돌아 가며 악센트가있는 캐릭터 (예 : 랄프 언급)

문제를 보여주는 작은 앱을 게시 할 수 있습니까? (username 및 pluimers.com에 Jeroen이있는 것에 대해 도메인 이름에 내 사서함에 도착할 수 있습니다).

-jeroen

도움을 주셔서 감사합니다. 어떤 테스트 후에 문제는 매우 간단했습니다 (또는 멍청한)

response.contenttype := 'text/html charset=UTF-8'

UTF8String ansistring widestring 사이에서 수동으로 변환 할 필요가 없습니다. Delphi 2009 문자열 사용량은 완벽합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top