私はそれがWordの問題ではなく、むしろ文字列がデータベースに格納される方法と思う。おそらく、Unicode/WideString文字列としてではなく、Ansi文字列として保存されます。それが本当であれば、エンコードされて保存されます。エンコーディングは、正しくデコードされたければ知っておく必要があります。ここで
はWideStringににANSI文字列を変換し、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.
上記のコードは、だから私はお勧めしたいUtility Library v.2.0.18
からフリーウェアユニットCodecUtilsWin32.pasを使用していますTWideStringFieldの代わりにTStringFieldを使用し、上の例のように文字列をWideStringに変換します。
データベースのフィールドはUnicodeとしてマークされていますが、このソリューションが機能します。どうもありがとうございました! :) – vrad