Lazarus 中的字符串 String,AnsiString,UnicodeString,UTF8String,WideString
Lazarus 在字符串处理上默认是UTF8编码
UTF8String = type ansistring;
如下面这段代码
s:=trim('abcd123'); lbStrLen1.Caption:=IntToStr(Length(s)); {本身就是UTF8编码} lbStrLen2.Caption:=IntToStr(length(Utf8ToAnsi(s))); lbStrLen3.Caption:=IntToStr(Length(UTF8Decode(s)));
将输出 7 ,7 ,7
还是那段代码
s:=trim('附件123'); lbStrLen1.Caption:=IntToStr(Length(s)); {本身就是UTF8编码} lbStrLen2.Caption:=IntToStr(length(Utf8ToAnsi(s))); lbStrLen3.Caption:=IntToStr(Length(UTF8Decode(s)));
结果是 9,7,5
UTF8Decode(s) 解码是 UnicodeString。
话说到这里那可不可以用强制呢!说不定编译器很智能。
s:='复件123'; Memo3.Append(format('with %20s to %20s : len=%d',['AnsiString(s)',s,length(s)])); Memo3.Append(format('with %20s to %20s : len=%d',['UnicodeString(s)',UnicodeString(s),length(UnicodeString(s))])); Memo3.Append(format('with %20s to %20s : len=%d',['WideString(s)',WideString(s),length(WideString(s))])); Memo3.Append(format('with %20s to %20s : len=%d',['UTF8String(s)',UTF8String(s),length(UTF8String(s))])); Memo3.Append(format('with %20s to %20s : len=%d',['UTF8Decode(s)',UTF8Decode(s),length(UTF8Decode(s))])); Memo3.Append(format('with %20s to %20s : len=%d',['Utf8ToAnsi(s)',Utf8ToAnsi(s),length(Utf8ToAnsi(s))]));
结果是
with AnsiString(s) to 复件123 : len=9
with UnicodeString(s) to 复件123 : len=6
with WideString(s) to 复件123 : len=6
with UTF8String(s) to 复件123 : len=9
with UTF8Decode(s) to ??123 : len=5
with Utf8ToAnsi(s) to ??123 : len=7
强制后长度等于6 ,不明白啊!