我是delphi XE8的新手.我有以下代码来自我的delphi版本6,我想在delphi XE8中运行它.
1. function UTF8ToStringLen(const src: PChar; const Len: Cardinal): widestring;
2. var
3. l: Integer;
4. begin
5. SetLength(Result, Len);
6. if Len > 0 then
7. begin
8. l := MultiByteToWideChar( CP_UTF8, 0, src, Len, PWChar(Result), Len*SizeOf(WideChar)); <--error
9. SetLength(Result, l);
10. end;
11. end;
12.
13.
14. function StringToUTF8Len(const src: PChar; const Len: Cardinal): string;
15. var
16. bsiz: Integer;
17. Temp: string;
18. begin
19. bsiz := Len * 3;
20. SetLength(Temp, bsiz);
21. if bsiz > 0 then
22. begin
23. StringToWideChar(src, PWideChar(Temp), bsiz);
24. SetLength(Result, bsiz);
25. bsiz := WideCharToMultiByte(CP_UTF8, 0, PWideChar(Temp), -1, PChar(Result), bsiz, nil, nil); <--error
26. if bsiz > 0 then dec(bsiz);
27. SetLength(Result, bsiz);
28. end;
29. end;
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,错误指向代码中的第8行和第25行,并显示错误消息
ERROR MESSAGE: Incompatible types: 'PAnsiChar' and 'PWideChar'
Run Code Online (Sandbox Code Playgroud)
我到处寻找解决方案,但我无法解决问题.请帮忙..谢谢.
Dav*_*nan 12
在Delphi 2007及更早版本中,PChar是别名PAnsiChar.在Delphi 2009及更高版本中,PChar是别名PWideChar.因此,通过更改编译器,您可以更改代码的含义.
您可以通过替换来解决此问题PChar,PAnsiChar并且代码将具有其原始含义.
在现代Unicode Delphi中,使用string(别名UnicodeString)而不是COM 更自然WideString.您还可以使用许多库例程中的一个来执行UTF-8转换.
肯定会有其他问题在你面前.我建议您阅读MarcoCantù关于Delphi中Unicode的白皮书作为您的下一步行动.