2010-03-15 45 views
0

我試圖解析各種語言RTF(通過MSEDIT),所有德爾福2010年,爲了統一生成HTML的一個比較好的方法。在RTF轉換代碼頁-1251爲Unicode

以俄羅斯/西里爾文爲起點我發現整個文檔的代碼頁是1252(西方),但俄文部分的文本是由字體的字符集(RUSSIAN_CHARSET 204)標識的。

到目前爲止我:

1)使用AnsiString類型(或RawByteString)通過從字體字符集查找解析RTF

2)確定的代碼頁時(見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功能的實際字符轉換。兩者都在內部使用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的轉換參數設置爲False,被證明是關鍵的唯一的事。 – 2010-03-15 16:37:25