记事本保存为Unicode后看16进制是Unicode编码(几UTF16),不是UTF8,UTF8系统也有转换函数ANSITOUTF8测试过了下面的函数运行正确:function WideStrToASCII(const ws:WideString):string;//将UTF8编码转为ASCII码 var i:Integer; begin Result:=''; for I := 1 to Length(ws) do begin if ws[i]<>#0 then Result:=Result+'&&#x'+IntTohex(Integer(ws[i]),4)+';'; end; end;例子: var ws:WideString; begin ws:='中国人'; ShowMessage(UnicodeToASCII(ws)); end;
function UnicodeToASCII(const ws:WideString):string;//将Unicode编码转为ASCII码 var i:Integer; begin Result:=''; for I := 1 to Length(ws) do begin if ws[i]<>#0 then Result:=Result+'&&#x'+IntTohex(Integer(ws[i]),4)+';'; end; end; procedure TForm1.FormCreate(Sender: TObject); var ws:WideString; begin ws:='中国人'; ShowMessage(UnicodeToASCII(ws)); end;
经过确认,你的编码是utf 16
建议还是用UNICODE编码吧,这样通用性好的
function XXOO(s:widestring):string ; var i:Integer; begin for i:=1 to Length(s) do result:=result+'&&#x'+ IntToHex(Integer(s[i]),4)+';'; end;ShowMessage(XXOO('中国人'));
WideStr: WideString;
utfStr: utf8String;
begin
utfStr := UTF8Encode(wideStr); //将wideString 数据转换为utf-8字符类型数据
end;
看看这个对你有帮助吗,string转wideString估计你知道的。http://eastlei.blog.163.com/blog/static/453153220110201433212/
这个网址是utf8的相关的一些函数。
深圳市 深圳市
这个不知道是什么格式的啊
http://topic.csdn.net/u/20111112/23/4fc26bbb-a079-422e-802a-ded9315e9257.html
Begin
Result:='&#x'+IntToHex(Integer(AiChinese[1]),4)+';';
end;
ShowMessage(Chinese2UniCode('中'));时间所限,随便写的,Chinese2UniCode只能处理单个汉字,你自己整理一下让它能处理字符串就OK
或者量不大的话,就直接用Chinese2UniCode('中')+Chinese2UniCode('国')+Chinese2UniCode('人')
有思路应该就可以写个函数了吧
var
i:Integer;
begin
Result:='';
for I := 1 to Length(ws) do
begin
if ws[i]<>#0 then
Result:=Result+'&&#x'+IntTohex(Integer(ws[i]),4)+';';
end;
end;例子:
var
ws:WideString;
begin
ws:='中国人';
ShowMessage(UnicodeToASCII(ws));
end;
var
i:Integer;
begin
Result:='';
for I := 1 to Length(ws) do
begin
if ws[i]<>#0 then
Result:=Result+'&&#x'+IntTohex(Integer(ws[i]),4)+';';
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ws:WideString;
begin
ws:='中国人';
ShowMessage(UnicodeToASCII(ws));
end;
var
i:Integer;
begin
for i:=1 to Length(s) do
result:=result+'&&#x'+ IntToHex(Integer(s[i]),4)+';';
end;ShowMessage(XXOO('中国人'));
并且简化简化的也有问题,对返回变量RESULT没有初始化,这个如果传进来的参数是空字符串的话,返回的结果可能就是未知的。并且省略了字符串结尾的判断,字符串有可能长度是20,但内容只有10后面就是#0了,所以说也不严禁