我有一个在 Delphi 6 中开发的轮询应用程序。它读取文件,根据规范解析文件,执行验证并上传到数据库(SQL Server 2008 Express Edition)
我们必须为具有双字节字符集 (DBCS) 的操作系统提供支持,例如日文操作系统。因此,我们将 SQL Server 中的数据库字段从 varchar 更改为 nvarchar。
轮询在带有 DBCS 的操作系统中运行良好。如果系统区域设置为日文/中文/韩文并且操作系统具有相应的语言包,它也适用于非 DBCS 操作系统。但是,如果 Locale 设置为英语,那么数据库包含双字节字符的垃圾字符。
我进行了一些测试,但未能确定解决方案。
例如,如果我使用 TStringList 从UTF-8文件中读取数据并将其保存到另一个文件,则保存 Unicode 数据。但是,如果我使用文件的内容使用 TADOQuery 组件运行更新查询,则会显示垃圾字符。该数据库还包含垃圾字符。
PFB示例代码:
var
stlTemp : TStringList;
qry : TADOQuery;
stQuery : string;
begin
stlTemp := TStringList.Create;
qry := TADOQuery.Create(nil);
stlTemp.LoadFromFile('D:\DelphiUnicode\unicode.txt');
//stlTemp.SaveToFile('D:\DelphiUnicode\1.txt'); // This works. Even though
//the stlTemp.Strings[0] contains junk characters if seen in watch
stQuery := 'UPDATE dbo.receivers SET company = ' + QuotedStr(stlTemp.Strings[0]) +
' WHERE receiver_cd = N' + QuotedStr('Receiver');
//company is a nvarchar field in the database
qry.Connection := ADOConnection1;
with qry do
begin
Close;
SQL.Clear;
SQL.Add(stQuery);
ExecSQL;
end;
qry.Free;
stlTemp.Free
end;
上面的代码在 DBCS 操作系统中运行良好。
我尝试过使用字符串、宽字符串和 UTF8String。但是,如果语言环境设置为英语,这在英语操作系统中不起作用。
请为此问题提供任何指示。