2010-03-15 4 views
0

유니 코드로 HTML을 생성하기 위해 RTF (MSEDIT를 통해)를 다양한 언어로 구문 분석하려고합니다. 모두 Delphi 2010에서 구문 분석하려고합니다.RTF에서 유니 코드로 Codepage-1251을 변환하는 더 좋은 방법

러시아어/키릴 문자를 시작점으로 사용 전체 문서 코드 페이지가 1252 (서양식)이지만 텍스트의 러시아어 부분은 글꼴의 문자 세트 (RUSSIAN_CHARSET 204)로 식별됩니다.

지금까지 나는 : 글꼴 문자 세트에서 조회하여 RTF

2) 코드 페이지를 결정을 구문 분석 할 때

1) 사용을 AnsiString (또는이 프로시 저는이) (http://msdn.microsoft.com/en-us/library/cc194829.aspx)

3 참조) 내 코드에서 조회 테이블을 사용하여 번역 : (이 테이블은 http://msdn.microsoft.com/en-gb/goglobal/cc305144.aspx에서 생성) - 지원되는 코드 페이지 당 하나의 테이블이 필요합니다!

이보다 나은 방법이 있어야합니다. 가급적 OS에 의해 제공되는 것이므로 상수 테이블보다 덜 부서지기 쉽습니다.

답변

2

코드 페이지로의 문자 세트 표는 충분히 작고 시스템이이를 수행하는 기능을 제공하는지는 의심 스럽지만 충분히 정적입니다.

실제 문자 변환을 수행하려면 SysUtils.TEncoding 클래스 또는 System.SetCodePage 함수를 사용할 수 있습니다. 둘 다 내부적으로 OS 제공 룩업 테이블을 사용하는 MultiByteToWideString을 사용하므로이를 유지할 필요가 없습니다.

같은 것을 보일 것이다 SetCodePage 사용 :

var 
    iStart, iStop: Integer; 
    RTF, RawText: AnsiString; 
    Text: string; 
    CodePage: Word; 
begin 
    ... 
    CodePage := CharSetToCodePage(CharSet); 
    RawText := Copy(RTF, iStart, iStop - iStart); 
    SetCodePage(RawText, CodePage, False); // Set string codepage to Russian without converting it 
    Text := string(RawText); // Automatic conversion from string codepage to Unicode 
+0

감사합니다! 내가 시도하지 않은 유일한 것은 SetCodePage의 Convert 매개 변수를 False로 설정하고 키로 판명되었습니다. –

관련 문제