我認爲這不是Word的問題,而是字符串存儲在數據庫中的方式。它們可能保存爲Ansi字符串,而不是Unicode/WideString字符串。如果這是真的,那麼他們被保存在一些你必須知道的編碼中,如果你想讓它們被正確解碼。
這裏是一個示例應用程序演示如何ANSI字符串轉換爲WideString的,並將其保存在Word中:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
ComObj,
ActiveX,
CodecUtilsWin32;
procedure Test();
var
wordApp, wordDoc: Variant;
ansiStr: string;
codec: TUnicodeCodec;
function str2WideStr(const s: string): WideString;
var
i: Integer;
begin
codec.DecodeStr(@s[1], Length(s), Result);
end;
begin
codec := TEncodingRepository.CreateCodecByAlias('ISO-8859-2');
ansiStr := #$BF#$F3#$B3#$E6; //"zólc"
wordApp := CreateOleObject('Word.Application');
wordDoc := wordApp.Documents.Add;
wordApp.Selection.TypeText(str2WideStr(ansiStr));
wordDoc.SaveAs('C:\sample.doc');
wordDoc.Close();
wordApp.Quit(False);
end;
begin
CoInitialize(nil);
Test();
end.
上面的代碼使用免費單元CodecUtilsWin32.pas從Utility Library v.2.0.18
所以我建議使用TStringField而不是TWideStringField並將字符串轉換爲WideStrings,如上例所示。
不,在Delphi 7中沒有AsWideString方法。在其他情況下,AsVariant可以正常工作。 – vrad 2009-06-02 16:35:22
不幸的是,Delphi 7是客戶的要求(這是他們唯一的版本)。 – vrad 2009-06-02 16:41:26