如何在Delphi XE4中将AnsiString转换为UnicodeString

如何在Delphi XE4中将AnsiString转换为UnicodeString,delphi,delphi-xe4,unicode-string,ansistring,Delphi,Delphi Xe4,Unicode String,Ansistring,我像上面那样进行了转换,但不起作用。我发现一些数据在str1中丢失。有没有安全的方法将AnsiString转换为UnicodeString?您的代码已经正确了。它将从ANSI转换为UTF-16而不会丢失信息 因此,我得出结论,当您分配给AnsiString变量时,信息丢失。换句话说,代码中的错误包含在代码的…部分中 错误可能是AnsiString变量的数据页和代码页不匹配 这是正确的工作方式。。。你必须更具体地举例说明。您的输入是什么,输出是什么(或者您觉得您丢失了什么)。在分配str2的过程中

我像上面那样进行了转换,但不起作用。我发现一些数据在str1中丢失。有没有安全的方法将AnsiString转换为UnicodeString?

您的代码已经正确了。它将从ANSI转换为UTF-16而不会丢失信息

因此,我得出结论,当您分配给AnsiString变量时,信息丢失。换句话说,代码中的错误包含在代码的
部分中


错误可能是AnsiString变量的数据页和代码页不匹配

这是正确的工作方式。。。你必须更具体地举例说明。您的输入是什么,输出是什么(或者您觉得您丢失了什么)。在分配
str2
的过程中,也可能已经发生了丢失。在不发出编译器警告的情况下,预期的方法是显式类型转换:
str1:=UnicodeString(str2)你真的必须告诉更多你认为某些数据丢失的原因<代码>写入(长度(str1),长度(str2):20);如果长度(str1)=长度(str2),那么对于I:=1到长度(str1),则执行writeln(str1[I]=str2[I])并查看是否存在错误reported@Arioch“您的比较循环非常简单,对于所有映射Unicode页面0的标志符号,它在Win-1252代码页之外都不起作用。它在win866中也适用于Cyrillics@Arnaudbouchezt。我相信,这就是您所问问题的答案。但是,您可能不会对此感到满意。你可能问错问题了。我猜想您应该展示一个SSCCE,并询问为什么字符串转换的行为方式会出乎您的意料。这样的问题很容易回答,肯定会解决你真正的问题。请注意,这将是一个完全不同的问题。这就是问题所在。停止将二进制数据读入文本数据类型。而且,当在多个字符编码之间转换时,绝对不要期望发生合理的事情。使用zip库读取zip文件。如果必须自己加载数据,请使用二进制安全数据类型,如TBytes@taoxl。请显示如何从zip文件中提取str2的代码。或者,如果您的意思是将zip文件读入字符串变量——这是“被设计破坏”的想法,那么将zip文件读入
TBytes
TMemoryStream
或其他原始二进制容器。
exzample code:
var
  str1 : String;
  str2 : AnsiString;
  ....
  str2 := ....;
  str1 := String(str2);