rt
解决方案 »
- 我用D7写DDE程序,客户端可以Request,服务端怎么没有响应的事件或方法!是要交互的而不是只控制服务器做事而不回复的。。。不知道我说明白了没有
- delphi里的IMAGE控件怎么响应键盘啊??急!!
- 求救:用DELPHI什么控件可以实现让用户自己选择纸张大小,自定义打印字段,自定义打印字体等!!!!
- 问一个小学数学课本上的题,请大家不吝赐教
- 打印报表的字段显示问题 超级急呀
- 升级了,散分!还有一个关于IUnknown的问题。
- 为什么?我装了个delphi7,里面怎么没有报表控件?用自定义安装也没有。
- Sender as TdxCheckEdit, dxDBGrid,Sender is TdxCheckEdit, dxDBGrid//as与is 两者有什么区别
- 关于COM的问题,有较深理解的朋友来看看
- 如何在delphi程序中判断远程打印机缺纸?!?!?
- 法律咨询:这个项目开发,我应当获多少报酬?
- 请教:如何让DBComboBox里面的项只能显示不能修改?
var
ascLen,i : integer;
tu : WideString;
c : char;
begin
tu := ascString;
SetLength (ascString,Length (tu) * 2);
ascLen := Length (ascString);
CopyMemory (@ascString[1],@tu[1],ascLen);
for i := 1 to ascLen div 2 do
begin
c := ascString[i * 2 - 1];
ascString[i * 2 - 1] := ascString[i * 2];
ascString[i * 2] := c;
end;
end;
UTF8ToUnicode
看一下这两个函数的帮助。
StringToWideChar
我写的很清楚啊,
我要把文本文件转为unicode编码.
比如原文件a.txt(ansi编码),现在我要把它改成a.txt(unicode编码),而且a.txt内容不变。你们给我的都是字符串的转换函数。
你可以用一个TStringList将文本文件Load进来,然后声明一个WideString变量,最后调用上面的StringToWideChar,转换后的信息保存在WideString中。
再声明一个MemoryStream将WideString写进流中。
最后将流保存为一个文本文件。你去文件文件看,它就是Unicode编码的,且信息一样。这就是在程序中的方法,信不信由你!
以前我也为ansi和unicode的转换,看遍了这些函数,其实最简单的方法就是
Ansi->Unicode
strUnicode := WideString(strAnsi);Unicode->Ansi
strAnsi := AnsiString(strUnicode);
谢谢你的回复,我按你的方法做,
发现如果a.txt中都是英文字符的话就都没问题。
如果中间有中文字符,结果就不对了。
我之前是用filestream来读写,结果也跟这一样。procedure TForm1.Button1Click(Sender: TObject);
var
a:tstringlist;
b:TMemoryStream;
stransi:string;
strunicode:widestring;
begin
a:=tstringlist.Create ;
a.LoadFromFile('c:\a.txt');
stransi:=a.Text ;
a.Free;
strunicode:=widestring(stransi);
b:=TMemoryStream.Create ;
b.Write(strunicode[1],length(strunicode)*2);
b.SaveToFile('c:\b.txt');
b.Free;
end;
var SL: TStringList;
MM: TMemoryStream;
AnStr: String;
WS: WideString;
P: PByteArray;
begin
SL:= TStringList.Create;
MM:= TMemoryStream.Create;
try
SL.LoadFromFile('test.txt');
AnStr:= SL.Text;
WS:= AnStr; //转为Unicode //文本开头写进Unicode的标识
GetMem(P, 2 * Sizeof(Char));
P[0]:= $FF;
P[1]:= $FE;
MM.Write(P^, 2 * Sizeof(Char)); //将Unicode文本写进流中保存。
MM.Write(PWideChar(WS)^, Length(WS) * Sizeof(WideChar));
MM.SaveToFile('test2.txt'); FreeMem(P);
finally
SL.Free;
MM.Free;
end;
end;我先在一个笔记本中写下:“yes是的,这是Unicode”,然后保存为Test文件。这个时候它是Ansi编码。
执行我上面的代码之后,文本保存为Test2,这时它就是Unicode码了,可以正确显示,你可选另存为看看它是不是Unicode编码。