我公司开发的投票应用程序在Delphi 6,读取文件,根据规范解析该文件,执行验证并上传到数据库(SQL Server 2008 Express的版 )
我们必须提供具有双字节字符集(DBCS),如日本OS操作系统的支持。 所以,我们改变了在SQL Server数据库字段从varchar到nvarchar的。
轮询操作系统工作正常DBCS。 它也成功的非DBCS操作系统上,如果系统区域设置为日语/中国/韩国和操作系统具有相应语言包。 但是,如果该区域设置为英语,然后,该数据库包含双字节字符垃圾字符。
我进行了一些测试,但没有找出解决方案。
例如,如果我从使用的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操作系统工作正常。
我曾尝试用绳子,WideString的UTF8字符串和播放。 但是,这并不在英文操作系统如果区域设置为英语的工作。
请提供这个问题的任何指针。